gpt4 book ai didi

python - 比较 pandas 中的多个数据框时在数据框中创建列

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:17 25 4
gpt4 key购买 nike

我有三个数据框:

          df1                  df2                    df3
scale year week n_u Code H_k year week n_u
0 -23 2016 20 131 002.55 1 2016 20 132
1 -22 2016 21 132 002.55 1 2016 23 132
2 -21 2016 22 ... 002.44 2 2016 22 131
002.32 1 2016 20 131
002.55 1 2016 22 131
002.55 1 2016 24 132
002.55 1 2016 21 132
002.55 1 2016 21 131
002.55 1 2016 24 131
002.55 2 2016 21 131
002.55 3 2016 22 132
002.55 1 2016 22 132
... ...

我还有一个变量c1 = 002.55。每次我设置这个变量的值。

我需要执行以下操作:

如果“Code”列中的值等于 c1,则选择 df3 中的所有行。

然后从 df2 中查找 n_u 列中的所有值(该列中的值可以不同)。对于每个唯一值,我需要在 df1 中创建一列。

并计算 df3 中 H_k 列中 df1 中每一行的值的总和。我需要按数据帧 df1 和 df3 中的年份和周进行比较(年份和周可能不同)。

结果应如下所示:

                  df1                 
scale year week 131 132
0 -23 2016 20 1 1
1 -22 2016 21 3 1
2 -21 2016 22 1 4
...

我希望这个例子能让大家更好地理解。

所有这些都是在“scale”列中的值不等于零之前完成的。

我想我可以使用 lambda。但我不知道这样的条件怎么写。

UPD 我会尝试更好地描述该算法:

选择 df3 中的所有行,其中 df3['Code'] = c1

缩放 != 0时:

对于df2['n_u']中的每个唯一值在df1中创建新列(通常可以实现吗?)

df1['df2 中的每个唯一值'] = df3['H_k'] 中条件的总和值
df1['年份'] = df3['年份']
df1['周'] = df3['周']

最佳答案

首先按boolean indexing过滤与 isin ,然后 groupby并通过 unstack reshape 聚合 sum

最后按 scaledf 过滤 df1 joindf1:

c1 = '002.55'
df = df3[(df3['Code'] == c1) & (df3['n_u'].isin(df2['n_u']))]
df = df.groupby(['year','week', 'n_u'])['H_k'].sum().unstack(fill_value=0)
print (df)
n_u 131 132
year week
2016 20 0 1
21 3 1
22 1 4
23 0 1
24 1 1

df = df1[df1['scale'] < 0].join(df, on=['year','week'])
print (df)
scale year week 131 132
0 -23 2016 20 0 1
1 -22 2016 21 3 1
2 -21 2016 22 1 4

关于python - 比较 pandas 中的多个数据框时在数据框中创建列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44885257/

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