我有一组带有数值和部分重叠索引的数据帧。如果索引出现在多个数据帧中,我希望将它们合并为take-mean。
import pandas as pd
import numpy as np
df1 = pd.DataFrame([1,2,3], columns=['col'], index=['a','b','c'])
df2 = pd.DataFrame([4,5,6], columns=['col'], index=['b','c','d'])
这给了我两个数据帧:
col col
a 1 b 4
b 2 c 5
c 3 d 6
现在,我想合并数据帧并取每个索引的平均值(如果适用,即如果它出现不止一次)。
应该是这样的:
col
a 1
b 3
c 4
d 6
我可以用一些高级合并/加入来完成吗?
像这样的:
或其他方式,如@unutbu回答:
关于Roman的问题,我发现IPython的
%timeit
命令是一种方便的基准代码方法:在这种情况下,
pd.concat(...).mean(...)
会快一点。但实际上,我们应该测试更大的数据帧,以获得更有意义的基准。顺便说一下,如果不想安装IPython,可以使用Python's ^{} module 运行等效的基准测试。只是需要更多的设置。显示如何执行此操作的docs has some examples。
注意,如果
df1
或df2
在其索引中有重复项,例如:然后这三个答案给出了不同的结果:
pd.merge
可能没有给出您想要的答案:当
pd.concat((df1, df2), axis=1)
引发值错误时:相关问题 更多 >
编程相关推荐