Как применить изменения к pandas groupby на основе значений из другого фрейма данных?

У меня есть серия 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) 

теперь я хочу изменить col2 в Data1 для каждого имени как

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 () получил несколько значений для аргумента 'axis'

не уверен, что мой подход правильный, и был бы признателен за любую помощь.

Это просто, как использование 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 

Надеюсь, это то, чего вы пытаетесь достичь. Если нет, пожалуйста, укажите более подробную информацию и желаемый результат!