python: row concat 2 dataframes, сохраняя их имена в виде нового столбца - PullRequest
4 голосов
/ 08 марта 2019

Я ищу Pythonic способ сделать эквивалент как bind_rows (dplyr пакет в R), который выполняет конкатенацию dataframe из списка data.frames и автоматически добавляет имякаждого столбца data.frame в виде столбца .id, чтобы запомнить, откуда поступают строки.

Есть ли простой способ сделать это?Я пытался использовать pd.concat:

df1 = pd.DataFrame([['a', 1], ['b', 2]], columns=['letter', 'number'])
df2 = df1.copy()
pd.concat([df1, df2])

Ожидаемый результат:

####     .id letter  number
#### 0   df1      a       1
#### 1   df1      b       2
#### 0   df2      a       1
#### 1   df2      b       2

Спасибо!

Ответы [ 2 ]

3 голосов
/ 08 марта 2019

Проверьте с помощью keys

pd.concat([df1, df2], keys=['df1', 'df2'],names =['id','index']).reset_index(level=0)
Out[880]: 
        id letter  number
index                    
0      df1      a       1
1      df1      b       2
0      df2      a       1
1      df2      b       2

Если вы хотите динамически создать ключи

pd.concat({x : y for x,y in enumerate([df1, df2])},names =['id','index']).reset_index(level=0)
Out[879]: 
       id letter  number
index                   
0       0      a       1
1       0      b       2
0       1      a       1
1       1      b       2
2 голосов
/ 08 марта 2019
pd.concat([df1, df2],keys=['df1','df2']).reset_index(level=0).rename(columns = {'level_0':'.id'})

    id  letter  number
0   df1 a   1
1   df1 b   2
0   df2 a   1
1   df2 b   2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...