gpt4 book ai didi

python - Pandas 按功能在组中查找对

转载 作者:行者123 更新时间:2023-12-04 08:59:45 25 4
gpt4 key购买 nike

我在 Pandas 中有一个巨大的数据框,其格式如下:

period  from_       to_        value
2020-07 Jonny Karl 15.00
2020-08 Matt Jonny 5.00
2020-08 Matt Karl 5.00
2020-08 Matt Karl 10.00
2020-08 Jonny Matt 10.00
如果我有一个人需要支付给另一个人的一年中的值(value)。这些人的名字在数据集上重复出现。
所以我想看看一年中一个人欠另一个人的值(value)。为此,我可以简单地使用:
sum_df = df.groupby([ "period", "from_", "to_"]).agg({"value": 'sum'})
但这就是我的问题,因为我试图找出一种执行方式来执行此聚合功能,以便它可以“识别”:
如果 person Aperson B 5 美元.和 person Bperson A 10 美元.它应该返回 person B在此期间欠 person A 5 美元.导致以下数据帧:
period  from_       to_        value
2020-07 Jonny Karl 15.00
2020-08 Matt Karl 15.00
2020-08 Jonny Matt 5.00
有人可以给我一个我可以遵循的方向来达到那个方向吗?

最佳答案

我的建议非常棘手。第一 merge 来自 groupby 的数据帧本身,但比较列 from_to_to_from_ .
value 中减去值和 value_y生成的列并将其保存在变量中。使用此变量,可以使用 update 更新原始 DF 中的列。

df1 = df.groupby(['period','from_','to_'])['value'].sum().reset_index()

temp = df1.reset_index().merge(df1,
left_on=['period', 'from_', 'to_'],
right_on=['period', 'to_', 'from_'],
suffixes=['', '_y'])

temp['value'] = temp['value'] - temp['value_y']
temp = temp[['index','period', 'from_', 'to_', 'value']]

temp.set_index('index', inplace=True)
df1.update(temp)

df1.head()
period from_ to_ value
0 2020-07 Jonny Karl 15.0
1 2020-08 Jonny Matt 5.0
2 2020-08 Matt Jonny -5.0
3 2020-08 Matt Karl 15.0
在这里,您可以决定如何处理那些不欠任何人的人的数据。如果他们从DF中删除,或者设置列 value归零
#remove rows where value is equal to or less than zero
df1.loc[df1['value'] > 0]
#output:
period from_ to_ value
0 2020-07 Jonny Karl 15.0
1 2020-08 Jonny Matt 5.0
3 2020-08 Matt Karl 15.0

#setting the value column to zero where it is negative
df1.loc[df1['value'] < 0, 'value'] = 0
#output:
period from_ to_ value
0 2020-07 Jonny Karl 15.0
1 2020-08 Jonny Matt 5.0
2 2020-08 Matt Jonny 0.0
3 2020-08 Matt Karl 15.0

关于python - Pandas 按功能在组中查找对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63621167/

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