gpt4 book ai didi

python - 如何根据另一个数据框的值对 pandas groupby 应用更改?

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

我有一个包含 3 列的 pandas groupby 系列,我想根据另一个 pandas 数据框的值对第三列进行更改

Data1                               Data2(unique names)

name col1 col2 name col
a 10 -0.2 x 0.002
b 80 0.3 a 0.004
a 72 1.1 b 0.007
a 54 0.8 ...
b 90 -3.2

创建 Pandas 数据框

df1 = pd.DataFrame.from_dict(Data1)
df2 = pd.DataFrame.from_dict(Data2)

并根据第一个数据框分组

df1Groupby = df1.groupby(df1.keys()[0])

获取 df2 中与 df1 中相同名称的行

common = {}
for i in df2[df2.keys()[0]]:
if i in df1[df1.keys()[0]].unique():
common[i] = df2[df2.keys()[0]==i][df2.keys()[1]].values
dfcommon = pd.DataFrame.from_dict(common)

现在我想将每个名称的 Data1 中的 col2 更改为

col2 = col2 + col1 * col

定义一个函数

def my_func(group, amt):
group[group.keys()[2]] = group[group.keys()[2]] + group[group.keys()[1]] * amt
return group

然后在主函数中调用函数

for i in dfcommon.index:
df1Groupby.get_group(i).apply(my_func, dfcommon.loc[i].values[0],axis=1)

然后我得到以下错误

TypeError: apply() got multiple values for argument 'axis'

不确定我的方法是否正确,希望得到任何帮助。

最佳答案

这很简单,只要使用 pandas.Series.map .您将创建“名称”和“列”之间的映射。在这种情况下,您不需要“合并”(加入)两个数据框,因为您只对从第二个数据框中检索一个值感兴趣。

# create a mapper
mapper = Data2.set_index('name')['col']
mapped_value = Data1['name'].map(mapper)

# crete new column
data1['new_column'] = data1['col1'] + data1['col2'] * mapped_value

希望这就是您要实现的目标。如果没有,请提供更多详细信息和所需的输出!

关于python - 如何根据另一个数据框的值对 pandas groupby 应用更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42507307/

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