我有一个包含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'
我不确定我的方法是否正确,希望能得到任何帮助。在
这是一个使用pandas.Series.map的简单方法。您将创建“name”和“col”之间的映射。在这种情况下,您不需要“合并”(联接)两个数据帧,因为您只想从第二个数据帧中检索一个值。在
希望这就是你想要达到的目标。如果没有请提供更多的细节和期望的输出!在
相关问题 更多 >
编程相关推荐