Как преобразовать несколько таблиц в столбец таблиц в pandas?

#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]