
现在,我想根据初始数据帧(df1,df2,df3)中是否存在相应的值来划分结果数据帧的每个值.例如.
df1 = pd.DataFrame([[1,2],[3,4]],index =['A','B'],columns = ['C','D'])df2 = pd.DataFrame([[11,12],[13,14]],index = ['A',columns = ['D','E'])df3 = df1.add(df2,fill_value=0)
这会导致像df一样
C D EA 1.0 13 12.0B 3.0 17 14.0
我需要一个df,如:
C D EA 1.0 6.5 12.0B 3.0 8.5 14.0
因为在两个数据帧中都找到了D列,所以我将这些值除以2.
任何人都可以提供一个通用的解决方案,假设我需要添加2个以上的数据帧(因此分割因子也会改变)并且每个数据帧中有超过100列.
In [13]: df = pd.concat([df1,df2],axis=1).fillna(0)
这会产生:
In [15]: dfOut[15]: C D D EA 1 2 11 12B 3 4 13 14
现在我们可以按列分组,计算平均值(平均值):
In [14]: df.groupby(df.columns,axis=1).mean()Out[14]: C D EA 1.0 6.5 12.0B 3.0 8.5 14.0
或者我们可以一步完成(感谢@jezrael):
In [60]: pd.concat([df1,axis=1).fillna(0).groupby(level=0,axis=1).mean()Out[60]: C D EA 1.0 6.5 12.0B 3.0 8.5 14.0
定时:
In [38]: df1 = pd.concat([df1] * 10**5,ignore_index=True)In [39]: df2 = pd.concat([df2] * 10**5,ignore_index=True)In [40]: %%timeit ...: df = pd.concat([df1,axis=1).fillna(0) ...: df.groupby(df.columns,axis=1).mean() ...:63.4 ms ± 2.39 ms per loop (mean ± std. dev. of 7 runs,10 loops each)In [41]: %%timeit ...: s = pd.SerIEs(np.concatenate([df1.columns,df2.columns])).value_counts() ...: df1.add(df2,fill_value=0).div(s) ...:28.7 ms ± 712 µs per loop (mean ± std. dev. of 7 runs,1 loop each)In [42]: %%timeit ...: pd.concat([df1,df2]).mean(level = 0) ...:65.5 ms ± 555 µs per loop (mean ± std. dev. of 7 runs,10 loops each)In [43]: df1.shapeOut[43]: (200000,2)In [44]: df2.shapeOut[44]: (200000,2)
目前的获胜者:@jezrael(28.7 ms±712μs) – 恭喜!
总结以上是内存溢出为你收集整理的python – 添加数据帧并根据可用性划分结果全部内容,希望文章能够帮你解决python – 添加数据帧并根据可用性划分结果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)