Как применить изменения к 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'
не уверен, что мой подход правильный, и был бы признателен за любую помощь.
- Pandon pandas: добавление списка элементов в определенном столбце для поиска all_elements
- Pandas pd.DataFrame преобразуется в кортежи вместо Dataframe
- Заполнение NaN в DataFrame на основе значений столбца
- Как я могу перебирать несколько кадров данных для выбора столбца в каждом из python?
- Объединение двух DataFrame с различным количеством строк
Это просто, как использование 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
Надеюсь, это то, чего вы пытаетесь достичь. Если нет, пожалуйста, укажите более подробную информацию и желаемый результат!
- Преобразование 10 в байты, странный результат
- SQLite – Как правильно структурировать мои данные в SQL-базах данных
- Как агрегировать и суммировать товары по месяцам?
- pandas dataframe возвращает первое слово в строке для столбца
- Pandas: подсчитывать уникальное значение в каждом столбце, перебирая их?
- применять иерархию или мультииндекс к столбцам панды
- pandas.nlargest () – путают с повторяющимися значениями индекса
- Удалить вторую строку заголовка в PANDAS
- Объедините числа из двух столбцов, чтобы создать один массив
- Как удалить подстроку строки в столбце Dataframe?
- Pandas DataFrame медленно показывает форму или типы