连接数据框列表并将原始数据框名称作为键
Concatenate List of Dataframes and Include Original Dataframe Names as Keys
我有代码可以创建具有相同结构的数据帧列表。我的愿望是将所有这些数据框附加在一起,但向新数据框添加一列,以标识该行最初来自哪个数据框。
我轻松地在数据帧列表中附加了:
import pandas as pd
df_rosters = pd.concat(list_of_rosters)
但是,我一直无法弄清楚如何添加具有原始数据框名称或索引的列。我发现了一堆建议使用 keys
参数的例子;但每个示例都有硬编码键。我的列表的大小在不断变化,所以我需要弄清楚如何动态添加键。
提前致谢!
让我们 assign
为列表中的每个 DataFrame 设置一个指示器列。 (名称可以与 DataFrame 列表一起压缩或由 enumerate
之类的东西创建):
和enumerate
pd.concat(d.assign(df_name=f'{i:02d}') for i, d in enumerate(list_of_rosters))
0 1 df_name
0 4 7 00
1 7 1 00
2 9 5 00
0 8 1 01
1 1 8 01
2 2 6 01
或 zip
:
pd.concat(d.assign(df_name=name)
for name, d in zip(['name1', 'name2'], list_of_rosters))
0 1 df_name
0 4 7 name1
1 7 1 name1
2 9 5 name1
0 8 1 name2
1 1 8 name2
2 2 6 name2
设置:
import numpy as np
import pandas as pd
np.random.seed(5)
list_of_rosters = [
pd.DataFrame(np.random.randint(1, 10, (3, 2))),
pd.DataFrame(np.random.randint(1, 10, (3, 2)))
]
list_of_rosters
:
[ 0 1
0 4 7
1 7 1
2 9 5,
0 1
0 8 1
1 1 8
2 2 6]
我有代码可以创建具有相同结构的数据帧列表。我的愿望是将所有这些数据框附加在一起,但向新数据框添加一列,以标识该行最初来自哪个数据框。
我轻松地在数据帧列表中附加了:
import pandas as pd
df_rosters = pd.concat(list_of_rosters)
但是,我一直无法弄清楚如何添加具有原始数据框名称或索引的列。我发现了一堆建议使用 keys
参数的例子;但每个示例都有硬编码键。我的列表的大小在不断变化,所以我需要弄清楚如何动态添加键。
提前致谢!
让我们 assign
为列表中的每个 DataFrame 设置一个指示器列。 (名称可以与 DataFrame 列表一起压缩或由 enumerate
之类的东西创建):
和enumerate
pd.concat(d.assign(df_name=f'{i:02d}') for i, d in enumerate(list_of_rosters))
0 1 df_name
0 4 7 00
1 7 1 00
2 9 5 00
0 8 1 01
1 1 8 01
2 2 6 01
或 zip
:
pd.concat(d.assign(df_name=name)
for name, d in zip(['name1', 'name2'], list_of_rosters))
0 1 df_name
0 4 7 name1
1 7 1 name1
2 9 5 name1
0 8 1 name2
1 1 8 name2
2 2 6 name2
设置:
import numpy as np
import pandas as pd
np.random.seed(5)
list_of_rosters = [
pd.DataFrame(np.random.randint(1, 10, (3, 2))),
pd.DataFrame(np.random.randint(1, 10, (3, 2)))
]
list_of_rosters
:
[ 0 1
0 4 7
1 7 1
2 9 5,
0 1
0 8 1
1 1 8
2 2 6]