Я думаю, что вам нужно concat
из списка DataFrames
с параметром keys
для ДФ имен, а затем удалить MultiIndex
и создать новый столбец File
:
dfs = [df1,df2, df3]
df = pd.concat(dfs, keys=range(1, len(dfs) + 1))
.reset_index(level=1, drop=True)
.rename_axis('File')
.reset_index()
Пример:
df1 = pd.DataFrame({'Product':['a','b','c'],
'Price':[4,5,6]})
print (df1)
Price Product
0 4 a
1 5 b
2 6 c
df2 = pd.DataFrame({'Product':['d','e','g'],
'Price':[9,8,7]})
print (df2)
Price Product
0 9 d
1 8 e
2 7 g
df3 = pd.DataFrame({'Product':['f','z','h'],
'Price':[1,2,4]})
print (df3)
Price Product
0 1 f
1 2 z
2 4 h
dfs = [df1,df2, df3]
df = pd.concat(dfs, keys=range(1, len(dfs) + 1)) \
.reset_index(level=1, drop=True) \
.rename_axis('File').reset_index()
print (df)
File Price Product
0 1 4 a
1 1 5 b
2 1 6 c
3 2 9 d
4 2 8 e
5 2 7 g
6 3 1 f
7 3 2 z
8 3 4 h
Вы также можете использовать пользовательские имена от list
:
dfs = [df1,df2,df3]
names = ['file1','file2','file3']
df = pd.concat(dfs, keys=names)
df = df.reset_index(level=1, drop=True).rename_axis('File').reset_index()
print (df)
File Price Product
0 file1 4 a
1 file1 5 b
2 file1 6 c
3 file2 9 d
4 file2 8 e
5 file2 7 g
6 file3 1 f
7 file3 2 z
8 file3 4 h
Awesome! Позвольте мне задать еще один вопрос. У меня много файлов .txt в моей папке. Объединение этих файлов с помощью «dfs = [df1, df2, df3, df4, df5 .....] не является хорошей идеей. Есть ли способ объединить все файлы вместо этого? –
Что делает его не очень хорошей идеей ? –
Например, у меня есть 1000 файлов .txt в моей папке. Если я объединять эти .txt-файлы, выполняя df1, df2, df3, ...., это требуется навсегда .... –