我有如下数据框,

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

10-01 05:56
查看更多