来自熊猫数据框嵌套字典的熊猫数据框
Posted
技术标签:
【中文标题】来自熊猫数据框嵌套字典的熊猫数据框【英文标题】:Pandas Dataframe from nested dictionary of pandas dataframes 【发布时间】:2021-02-15 22:52:57 【问题描述】:我有一个包含 2 级键的字典,第二级的值是数据框:
my_dict =
'elem1':'day1': pd.DataFrame(columns=['Col1', 'Col2']),
'day2': pd.DataFrame(columns=['Col1', 'Col2'])
,
'elem2':'day1': pd.DataFrame(columns=['Col1', 'Col2']),
'day2': pd.DataFrame(columns=['Col1', 'Col2'])
'day3': pd.DataFrame(columns=['Col1', 'Col2'])
如何将其转换为以下形式的多索引 pandas 数据框:
Col1 Col2
elem1 day1 ... ...
day2 ... ...
elem2 day1 ... ...
day2 ... ...
我已经查看了这些答案,但无法拼凑出一个解决方案:
Nested dictionary to multiindex dataframe where dictionary keys are column labels Nested Dictionary to MultiIndex pandas DataFrame (3 level) Construct pandas DataFrame from items in nested dictionary Convert list of dictionaries to a pandas DataFrame Nested dictionary to multiindex dataframe where dictionary keys are column labels【问题讨论】:
【参考方案1】:想法是通过两个键创建元组并传递给concat
,MultiIndex
的第三级是从原始DataFrame
s 的索引值创建的,如果需要,您可以将其删除:
my_dict =
'elem1':'day1': pd.DataFrame(1, columns=['Col1', 'Col2'], index=[1,2]),
'day2': pd.DataFrame(2, columns=['Col1', 'Col2'], index=[1,2])
,
'elem2':'day1': pd.DataFrame(3, columns=['Col1', 'Col2'], index=[1,2]),
'day2': pd.DataFrame(4, columns=['Col1', 'Col2'], index=[1,2]),
'day3': pd.DataFrame(5, columns=['Col1', 'Col2'], index=[1,2])
d = (k1, k2): v2 for k1, v1 in my_dict.items() for k2, v2 in v1.items()
print (d)
('elem1', 'day1'): Col1 Col2
1 1 1
2 1 1, ('elem1', 'day2'): Col1 Col2
1 2 2
2 2 2, ('elem2', 'day1'): Col1 Col2
1 3 3
2 3 3, ('elem2', 'day2'): Col1 Col2
1 4 4
2 4 4, ('elem2', 'day3'): Col1 Col2
1 5 5
2 5 5
df = pd.concat(d, sort=False)
print (df)
Col1 Col2
elem1 day1 1 1 1
2 1 1
day2 1 2 2
2 2 2
elem2 day1 1 3 3
2 3 3
day2 1 4 4
2 4 4
day3 1 5 5
2 5 5
df = pd.concat(d, sort=False).reset_index(level=2, drop=True)
print (df)
Col1 Col2
elem1 day1 1 1
day1 1 1
day2 2 2
day2 2 2
elem2 day1 3 3
day1 3 3
day2 4 4
day2 4 4
day3 5 5
day3 5 5
【讨论】:
很好的答案,我只需要修改以下行:df = pd.concat(d, sort=False)
,因为我想要一个特定的专栏预先【参考方案2】:
试试这样:
my_dict =
'elem1':'day1': pd.DataFrame(columns=['Col1', 'Col2']),
'day2': pd.DataFrame(columns=['Col1', 'Col2'])
,
'elem2':'day1': pd.DataFrame(columns=['Col1', 'Col2']),
'day2': pd.DataFrame(columns=['Col1', 'Col2'])
'day3': pd.DataFrame(columns=['Col1', 'Col2'])
nd =
for x in my_dict:
nd.update(my_dict[x])
df = pd.DataFrame(nd,index=my_dict.keys())
【讨论】:
以上是关于来自熊猫数据框嵌套字典的熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章