Добавить столбец, идентифицирующий исходный фрейм данных при использовании pd.concat - PullRequest
0 голосов
/ 28 августа 2018

У меня есть словарь фреймов данных, подобный следующему:

test = {'df1':pd.DataFrame({'col1':[3, 5, 1, 4], 'col2':[3, 5, 1, 4]}), 'df2':pd.DataFrame({'col1':[3, 5, 1, 4], 'col2':[3, 5, 1, 4]}), 'df3':pd.DataFrame({'col1':[3, 5, 1, 4], 'col2':[3, 5, 1, 4]}), 'df4':pd.DataFrame({'col1':[3, 5, 1, 4], 'col2':[3, 5, 1, 4]})]

Я хочу объединить эти фреймы данных, но добавить новый столбец, в котором указано «идентификатор» (имя ключа словаря), из которого фрейм данных получено значение. Как это может быть сделано? Если я сделаю pd.concat(test.values()), я получу объединение, которое мне нужно, но без идентификатора.

Спасибо, Jack

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Один из способов сделать это - использовать assign. Вы можете перебирать все dfs в своем словаре и назначать столбец identity по мере продвижения:

pd.concat([df.assign(identity=k) for k,df in test.items()])

Что дает вам:

   col1  col2 identity
0     3     3      df1
1     5     5      df1
2     1     1      df1
3     4     4      df1
0     3     3      df2
1     5     5      df2
2     1     1      df2
3     4     4      df2
0     3     3      df3
1     5     5      df3
2     1     1      df3
3     4     4      df3
0     3     3      df4
1     5     5      df4
2     1     1      df4
3     4     4      df4
0 голосов
/ 28 августа 2018

Использование concat с keys

pd.concat(test.values(),keys=test.keys())
Out[261]: 
       col1  col2
df1 0     3     3
    1     5     5
    2     1     1
    3     4     4
df2 0     3     3
    1     5     5
    2     1     1
    3     4     4
df3 0     3     3
    1     5     5
    2     1     1
    3     4     4
df4 0     3     3
    1     5     5
    2     1     1
    3     4     4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...