#python #pandas
#python #pandas
Вопрос:
У меня есть два фрейма данных в pandas.
Теперь я хочу объединить их в один фрейм данных, в котором каждый дополнительный столбец соответствует списку элементов, соответствующих ключу в фрейме данных2. одна таблица похожа на дочернюю по отношению к другой (вторая таблица имеет ключ foriegn, который ссылается на первичный ключ таблицы1). Например,
Я не знаю никаких встроенных методов для выполнения такой операции.Было бы здорово, если бы вы помогли мне объединить столбцы.
Заранее спасибо.
Комментарии:
1. Здравствуйте, не могли бы вы обновить свой пост, чтобы показать, что вы пробовали до сих пор?
2. Какая-то проблема с ответом?
Ответ №1:
Используйте GroupBy.agg
with list
, добавьте пропущенные значения by Series.reindex
и добавьте в df1
by DataFrame.join
:
df22 = (df2.groupby('City_name')
.agg(list)
.reindex(df1['City_name'].unique(), fill_value=[]))
df = df1.join(df22, on='City_name')
Комментарии:
1. переиндексация позволяет
[]
, но.fillna
не странно. Узнал, что reindex принимает[]
2. Спасибо за метод. Это может быть возможно, если у меня есть только один столбец в df2, отличный от key, но если у меня около многих (скажем, 100) столбцов в df2, которые должны быть объединены таким же образом. Как мне это сделать? (Это очень сложно сделать вручную для каждого столбца, и если мы используем цикл for, сложность может увеличиться)
3. @nachiappanvenkatesh — тогда удалите
['Humidity']
только. Ответ был отредактирован.4. @Ch3steR — да, согласен.
Ответ №2:
Сначала сгруппируйте city и внесите Humidity
в список, используя GroupBy.agg
, затем используйте df.merge
on City_name
. Теперь заполните недостающие значения с []
помощью pd.Series.fillna
g = df2.groupby('City_name').agg(list)
out = df1.merge(g, left_on='City_name', right_index=True, how='outer')
out['Humidity'] = out['Humidity'].fillna({i:[] for i in out.index})
City_name Temp Humidity
0 city1 47 [1, 2, 7]
1 city2 34 []
2 city3 83 [9]