gpt4 book ai didi

python - Pandas merge 每次合并时除以一个值

转载 作者:行者123 更新时间:2023-12-04 01:09:08 24 4
gpt4 key购买 nike

我有以下 2 个数据框

df :

     Name
1 A
2 B
3 C
4 C
5 D
6 D
7 D
8 D

df_value:

     Name   Value
1 A 50
2 B 100
3 C 200
4 D 800

我想合并两个数据帧(到 df),但是新的 Value 值是 df_value Value 除以df

Name 的出现次数

输出:

     Name   Value
1 A 50
2 B 100
3 C 100
4 C 100
5 D 200
6 D 200
7 D 200
8 D 200

A出现一次,在df_value中的值为50,所以它的值为50。B的逻辑相同。C出现2次,在df_value中的值为200,所以它的值为200/2 = 100D出现了4次,在df_value中的值为800,所以它的值为800/4 = 200

我很确定有一个非常简单的方法可以做到这一点,但我找不到它。提前致谢。

最佳答案

使用Series.map通过 Name 列和来自 df_value 的 Series 并划分 Series.value_counts 的映射值:

df['Value'] = (df['Name'].map(df_value.set_index('Name')['Value'])
.div(df['Name'].map(df['Name'].value_counts())))
print (df)
Name Value
1 A 50.0
2 B 100.0
3 C 100.0
4 C 100.0
5 D 200.0
6 D 200.0
7 D 200.0
8 D 200.0

另一种解决方案,谢谢@sammywemmy 是通过已经划分的值进行映射:

df1.assign(Value=df1.Name.map(df2.set_index("Name").Value.div(df1.Name.value_counts())))

merge 的解决方案是可能的,还添加了另一种计数方式 GroupBy.transform :

df['Value'] = (df.merge(df_value, on='Name', how='left')['Value']
.div(df.groupby('Name')['Name'].transform('size')))

关于python - Pandas merge 每次合并时除以一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65405030/

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