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

2024-09-29 23:26:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含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

创建熊猫数据帧

^{pr2}$

按第一个数据帧分组

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

然后在main中调用函数

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'

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


Tags: 数据inpandasforgroupcommonkeyscol2
1条回答
网友
1楼 · 发布于 2024-09-29 23:26:13

这是一个使用pandas.Series.map的简单方法。您将创建“name”和“col”之间的映射。在这种情况下,您不需要“合并”(联接)两个数据帧,因为您只想从第二个数据帧中检索一个值。在

# 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

希望这就是你想要达到的目标。如果没有请提供更多的细节和期望的输出!在

相关问题 更多 >

    热门问题