python - 从一系列键和一个键:值数据帧构造数据帧
问题描述
我有一个熊猫系列的键,想通过从其他数据框中选择值来创建一个数据框。
例如。
data_df = pandas.DataFrame({'key' : ['a','b','c','d','e','f'],
'value1': [1.1,2,3,4,5,6],
'value2': [7.1,8,9,10,11,12]
})
keys = pandas.Series(['a','b','a','c','e','f','a','b','c'])
data_df
# key value1 value2
#0 a 1.1 7.1
#1 b 2.0 8.0
#2 c 3.0 9.0
#3 d 4.0 10.0
#4 e 5.0 11.0
#5 f 6.0 12.0
我想得到这样的结果
result
key value1 value2
0 a 1.1 7.1
1 b 2.0 8.0
2 a 1.1 7.1
3 c 3.0 9.0
4 e 5.0 11.0
5 f 6.0 12.0
6 a 1.1 7.1
7 b 2.0 8.0
8 c 3.0 9.0
我成功做到这一点的一种方法是使用
def append_to_series(key):
new_series=data_df[data_df['key']==key].iloc[0]
return new_series
pd.DataFrame(key_df.apply(append_to_series))
但是,此功能非常缓慢且不干净。有没有办法更有效地做到这一点?
解决方案
按列创建索引key
,然后使用DataFrame.reindex
or DataFrame.loc
:
注意key
:原始列的必要唯一值。
df = data_df.set_index('key').reindex(keys.rename('key')).reset_index()
或者:
df = data_df.set_index('key').loc[keys].reset_index()
print (df)
key value1 value2
0 a 1.1 7.1
1 b 2.0 8.0
2 a 1.1 7.1
3 c 3.0 9.0
4 e 5.0 11.0
5 f 6.0 12.0
6 a 1.1 7.1
7 b 2.0 8.0
8 c 3.0 9.0
推荐阅读
- mysql - MySQL记录平均工作日和每小时
- ios - 错误:键入 [AnyHashable: Any]?没有下标成员 (Swift)
- sql-server - 如何在 SQL 中根据天数和顺序设置标志
- c++ - 如何扩展继承类的继承类
- python - 发生错误时如何使用另一个python脚本重新启动python脚本
- objective-c - 如何从 int* 转换为 NSNumber*
- javascript - 如果列表项 onClick 并重置其他项,则更改背景颜色
- java - 如果帧大小 > 1,Java AudioInputStream IOException 无法读取单个字节
- reactjs - MobX 和 Firebase,TypeError:WEBPACK_IMPORTED_MODULE_0__firebase.b.ref 不是函数
- javascript - babel loader 仅在文件上工作