我有如下数据框,
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()
效果不理想。有人可以解释为什么吗? 最佳答案
区别在于diff
不是像sum
这样的聚合值,而是返回新的2列-首先由NAN
填充,然后由值填充。
因此,这里可能的解决方案是通过NaN
仅删除DataFrame.dropna
列:
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