【发布时间】:2019-08-29 22:29:02
【问题描述】:
我需要一种快速的方法来从 pandas 数据框中提取正确的值: 给定一个在多个命名列中包含(大量)数据的数据框和一个其值仅包含其他列名称的附加列,我如何从数据列中选择值,并将附加列作为键?
通过显式循环很简单,但是在 DataFrame 上直接使用 .iterrows() 之类的东西会非常慢。如果转换为 numpy-arrays,它会更快,但仍然不快。我可以结合 pandas 的方法来更快地完成它吗?
示例:这是一种 DataFrame 结构,其中 A 和 B 列包含数据,keys 列包含可供选择的键:
import pandas
df = pandas.DataFrame(
{'A': [1,2,3,4],
'B': [5,6,7,8],
'keys': ['A','B','B','A']},
)
print(df)
输出:
Out[1]:
A B keys
0 1 5 A
1 2 6 B
2 3 7 B
3 4 8 A
现在我需要一些 快速 代码来返回类似的 DataFrame
Out[2]:
val_keys
0 1
1 6
2 7
3 4
我的想法是这样的:
tmp = df.melt(id_vars=['keys'], value_vars=['A','B'])
out = tmp.loc[a['keys']==a['variable']]
产生:
Out[2]:
keys variable value
0 A A 1
3 A A 4
5 B B 6
6 B B 7
但没有正确的顺序或索引。所以这不是一个完全的解决方案。
有什么建议吗?
【问题讨论】:
标签: python pandas performance