我的数据框如下,
df = pd.DataFrame({'A':[1,4,7,1,4,7],'B':[2,5,8,2,5,8],'C':[3,6,9,3,6,9],'D':[1,2,3,1,2,3]})
A B C D
0 1 2 3 1
1 4 5 6 2
2 7 8 9 3
3 1 2 3 1
4 4 5 6 2
5 7 8 9 3
如何找到列(A和B)之间的差异并另存为AB,并使用(C&D)并在数据框中另存为CD。
预期输出:
AB CD
0 1.0 -2.0
1 1.0 -4.0
2 1.0 -6.0
3 1.0 -2.0
4 1.0 -4.0
5 1.0 -6.0
尝试使用
d = dict(A='AB', B='AB', C='CD', D='CD')
df.groupby(d, axis=1).diff()
如here所述,此方法对sum()
效果很好,但对diff()
的效果不理想。有人可以解释为什么吗?
答案 0 :(得分:2)
差异是diff
而不是像sum
这样的聚合值,而是返回新的2列-首先用NAN
填充,然后用值填充。
因此,这里可能的解决方案是仅删除DataFrame.dropna
的NaN
列:
d = dict(A='AB', B='AB', C='CD', D='CD')
df1 = df.rename(columns=d).groupby(level=0, axis=1).diff().dropna(axis=1, how='all')
print (df1)
AB CD
0 1.0 -2.0
1 1.0 -4.0
2 1.0 -6.0
3 1.0 -2.0
4 1.0 -4.0
5 1.0 -6.0