Объединить список DataFrame в столбце?
у меня возникли проблемы с объединением массива фреймов данных в один фрейм данных, объединенный в определенном столбце.
у меня есть список фреймов данных под названием data
, причем каждый элемент data[i]
выглядит так:
Rank Name
2400 1 name1
2401 2 name2
2402 3 name3
2403 4 name4
2404 5 name5
каждый DataFrame содержит список Топ-5 для данного месяца, и список содержит ежемесячные результаты за год.
Я хотел бы, чтобы окончательный, объединенный фрейм данных выглядел так:
Rank Name_month1 Name_month2 Name_month3 ...
2400 1 name1 name1 name1 ...
2401 2 name2 name2 name2 ...
2402 3 name3 name3 name3 ...
2403 4 name4 name4 name4 ...
2404 5 name5 name5 name5 ...
где каждый столбец, после во-первых, соответствует месячному рангу.
у меня нет проблем с объединением 2 кадров данных из списка,data
:
pandas.merge(data[0], data[1], on='Rank', suffix=['_month1', '_month2'])
но когда я пытаюсь использовать filter()
или цепи .merge
s, Я продолжаю сталкиваться с проблемами.
какие мысли? Спасибо!
2 ответов
проблема в том, что при первом слиянии вы изменили имена столбцов (добавив суффиксы), и во втором слиянии не будет столкновения имен, поэтому суффиксы во втором слиянии никогда не будут использоваться. Решение переименовать столбцы вручную после слияния.
In [2]: df
Out[2]: Rank Name
2400 1 name1
2401 2 name2
2402 3 name3
2403 4 name4
2404 5 name5
In [3]: df.merge(
df, on='Rank', suffixes=['_month1', '_month2']
).merge(df, on='Rank').rename(
columns={'Name': 'Name_month3'}
).merge(df, on='Rank').rename(
columns={'Name': 'Name_month4'}
)
Out[3]: Rank Name_month1 Name_month2 Name_month3 Name_month4
0 1 name1 name1 name1 name1
1 2 name2 name2 name2 name2
2 3 name3 name3 name3 name3
3 4 name4 name4 name4 name4
4 5 name5 name5 name5 name5
Если у вас есть список фреймов данных, просто сделайте:
In [4]: data = [df, df, df, df]
current = data[0].rename(columns={'Name': 'Name_month1'})
for i, frame in enumerate(data[1:], 2):
current = current.merge(frame, on='Rank').rename(
columns={'Name': 'Name_month%d' % i})
current
Out[4]: Rank Name_month1 Name_month2 Name_month3 Name_month4
0 1 name1 name1 name1 name1
1 2 name2 name2 name2 name2
2 3 name3 name3 name3 name3
3 4 name4 name4 name4 name4
4 5 name5 name5 name5 name5
Я создал Gist, содержащий функцию для присоединения к "списку" фреймов данных. Список на самом деле является словарем, содержащим ключи, которые являются суффиксами, используемыми в случае столкновения имен столбцов:
Присоединяйтесь к списку (dict) фреймов данных pandas