#python #pandas #dataframe #merge
Вопрос:
Дело в том, что у меня есть два кадра данных. Первый кадр данных содержит 5 столбцов, а второй-10 столбцов. Кроме того, есть несколько наблюдений, которые появляются в обоих кадрах данных, и я хотел сохранить только те, которые появляются во втором.
Это будет первый кадр данных:
id month year purchase category A0 2 2020 100 clothes A0 3 2020 40 food A9 2 2020 50 food A9 3 2020 90 food A9 4 2020 150 clothes A9 5 2020 160 clothes B1 2 2021 110 game B1 3 2021 100 game . . .
И это будет второй кадр данных:
id month year purchase category col_1 ... col_n A0 2 2020 100 clothes 10 ... ABC A9 4 2020 150 clothes 20 ... DDD A9 5 2020 160 clothes 10 ... ACD B1 2 2021 110 game 15 ... EEE . . .
Я хотел собрать два фрейма данных вместе, сложив их в стопку, но когда есть наблюдение со всеми пятью равными столбцами, мы будем рассматривать только наблюдение из второго фрейма данных, поэтому я могу заполнить все столбцы.
Это был бы желаемый результат:
id month year purchase category col_1 ... col_n A0 2 2020 100 clothes 10 ... ABC A0 3 2020 40 food NaN ... NaN A9 2 2020 50 food NaN ... NaN A9 3 2020 90 food NaN ... NaN A9 4 2020 150 clothes 20 ... DDD A9 5 2020 160 clothes 10 ... ACD B1 2 2021 110 game 15 ... EEE B1 3 2021 100 game NaN ... NaN . . .
Я думал об использовании pandasql, поэтому я бы сделал несколько подзапросов. Но, может быть, есть решение для Панд, более короткое и быстрое.
Комментарии:
1. Пожалуйста, добавьте свой ожидаемый результат к вопросу.
Ответ №1:
Почти наверняка есть какой-то способ сделать это в одной строке, но этот подход все равно должен сработать:
df1 = pd.DataFrame({'id': ['A0', 'A0', 'A9'], 'month': [2, 3, 2], 'purchase': [100, 40, 50], 'category': ['clothes', 'food', 'food']}) df2 = pd.DataFrame({'id': ['A0', 'A0', 'A9'], 'month': [2, 3, 4], 'purchase': [100, 40, 50], 'category': ['clothes', 'food', 'food'], 'something else': ['foo', 'blah', 'blerg']}) df = pd.merge(df2, df1, how = 'outer') df = df.drop_duplicates(subset = df1.columns)
Это тогда даст:
ID | месяц | Покупка | Категория | что-то еще | |
---|---|---|---|---|---|
0 | A0 | 2 | 100 | Одежда | фу |
1 | A0 | 3 | 40 | Еда | чепуха |
2 | A9 | 4 | 50 | Еда | блерг |
3 | A9 | 2 | 50 | Еда | NaN |