pandas 将大型字典合并到单个 Dataframe 中

pxyaymoc  于 2023-03-06  发布在  其他
关注(0)|答案(4)|浏览(169)

我有一本字典。

import pandas as pd
d = {
    'A':pd.DataFrame(
        {'Age' : [5,5,5],
         'Weight' : [5,5,5]}),
     'B':pd.DataFrame(
         {'Age' : [10,10,10],
        'Weight' : [10,10,10]}),
     'C':pd.DataFrame(
         {'Age' : [7,7,7],
        'Weight' : [10,10,100]}),
     }

d

我想把它转换成一个 Dataframe 。

data = [
        ['A',5,5],
        ['A',5,5], 
        ['A',5,5],
        ['B',10,10],
        ['B',10,10], 
        ['B',10,10],
        ['C',7,10],
        ['C',7,10], 
        ['C',7,100],
        ]
df = pd.DataFrame(data, columns=['Team', 'Age', 'Weight'])
df
vlju58qv

vlju58qv1#

concat可以很好地处理值为DataFrames的字典,字典的键成为结果DataFrame的外层。

out = pd.concat(d, names=['Team'])

print(out)
        Age  Weight
Team               
A    0    5       5
     1    5       5
     2    5       5
B    0   10      10
     1   10      10
     2   10      10
C    0    7      10
     1    7      10
     2    7     100

然后,我们可以通过.reset_index将这些键作为特定的列插入回去。

out = pd.concat(d, names=['Team']).reset_index('Team').reset_index(drop=True)

print(out)
  Team  Age  Weight
0    A    5       5
1    A    5       5
2    A    5       5
3    B   10      10
4    B   10      10
5    B   10      10
6    C    7      10
7    C    7      10
8    C    7     100
deyfvvtc

deyfvvtc2#

使用pd.concat并使用dict密钥扩充初始 Dataframe :

df = pd.concat([df.assign(Team=[k] * df.index.size) for k, df in d.items()],
               axis=0, ignore_index=True)
Age  Weight Team
0    5       5    A
1    5       5    A
2    5       5    A
3   10      10    B
4   10      10    B
5   10      10    B
6    7      10    C
7    7      10    C
8    7     100    C
odopli94

odopli943#

尝试使用pd.concat()

k,v = zip(*d.items())

pd.concat(v,keys = k,names = ['Team']).reset_index(level=0)

输出:

Team  Age  Weight
0    A    5       5
1    A    5       5
2    A    5       5
0    B   10      10
1    B   10      10
2    B   10      10
0    C    7      10
1    C    7      10
2    C    7     100
8ulbf1ek

8ulbf1ek4#

import pandas as pd

d = {
    'A':pd.DataFrame(
        {'Age' : [5,5,5],
         'Weight' : [5,5,5]}),
     'B':pd.DataFrame(
         {'Age' : [10,10,10],
        'Weight' : [10,10,10]}),
     'C':pd.DataFrame(
         {'Age' : [7,7,7],
        'Weight' : [10,10,100]}),
     }

r = (pd.concat([d[k] for k,v in list(d.items()) if d[k].insert(0, "Team", k) is None])
       .reset_index(drop=True)
      )

print(r)
Team  Age  Weight
0    A    5       5
1    A    5       5
2    A    5       5
3    B   10      10
4    B   10      10
5    B   10      10
6    C    7      10
7    C    7      10
8    C    7     100

相关问题