查找多个列之间的差异以及在数据框中作为单独的列

时间:2019-07-22 10:31:25

标签: python python-3.x pandas pandas-groupby

我的数据框如下,

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()的效果不理想。有人可以解释为什么吗?

1 个答案:

答案 0 :(得分:2)

差异是diff而不是像sum这样的聚合值,而是返回新的2列-首先用NAN填充,然后用值填充。

因此,这里可能的解决方案是仅删除DataFrame.dropnaNaN列:

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