gpt4 book ai didi

python Pandas : conditional subtraction

转载 作者:太空宇宙 更新时间:2023-11-04 00:32:50 26 4
gpt4 key购买 nike

enter image description here

enter image description here

我想对dataframe进行条件减法(如第一张图所示)。

基本上,这就是我想要做的:

  1. 减去我和你之间的食物和衣服的 col1 和 col2 的值,并为差异创建新的行。

因为第一行有'food'和'me',第三行有'food'和'you',所以你从第一行减去第三行的col1和col2的值(300 - 600 = -300,200 - 500 = -300)。

因为第二行有'clothing'和'me',第四行有'clothing'和'you',所以你从第二行减去第四行的col1和col2的值(500 - 200 = 300和 600 - 700 = -100)。

我如何使用 Pandas 数据框实现它?

最佳答案

您可以使用 pd.concatgroupby 并利用基于索引的 Pandas 内在数据对齐方式:

输入 df:

df = pd.DataFrame({'type1':['food','clothing','food','clothing'],'type2':['me','me','you','you'],'col1':[300,500,600,200],'col2':[200,600,500,700]})


pd.concat([df.set_index(['type1','type2'])
.groupby('type1')
.apply(lambda x: x.iloc[0]-x.iloc[1])
.assign(type2='us')
.set_index('type2', append=True),
df.set_index(['type1','type2'])]).reset_index()

对于 0.20.0 之前的 Pandas

pd.concat([df.set_index(['type1','type2'])
.groupby(level=0)
.apply(lambda x: x.iloc[0]-x.iloc[1])
.assign(type2='us')
.set_index('type2', append=True),
df.set_index(['type1','type2'])]).sort_index(level=[1,0]).reset_index()

输出:

      type1 type2  col1  col2
0 clothing us 300 -100
1 food us -300 -300
2 food me 300 200
3 clothing me 500 600
4 food you 600 500
5 clothing you 200 700

关于 python Pandas : conditional subtraction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45172463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com