[英]Convert nested dictionary to multilevel dataframe
I have a dictionary which looks like this. 我有一本像这样的字典。
{ '11457': { 'Client Orders': { 'Z07640C': 422,
'Z04276B': 93,
'Z15421A': 178,
'Z77679': 4},
'Name': 'SANDY',
'Total Orders': 697},
'1191': { 'Client Orders': { 'Z03456B': 101,
'Z10424A': 754,
'Z10453SR': 84,
'Z13454': 658,
'Z13846': 279},
'Name': 'Deep',
'Total Orders': 1876},
'13139': { 'Client Orders': { 'Z32421A': 2,
'Z43487B': 24,
'Z44411LR': 6,
'Z54611SR': 2},
'Name': 'Sran',
'Total Orders': 34}}
I want to convert this to into a dataframe which looks like. 我想将其转换为一个看起来像的数据框。
| Code | Name | Total | Trading Account | Count |
|11475 | SANDY| 697 | Z07640C | 422 |
| | | | Z04276B | 93 |
...
|13139 |Sran | 34 | Z32421A | 2 |
| | | | Z43487B | 24 |
...
My primary key is the code and the secondary key is Name. 我的主键是代码,辅助键是Name。
I want it to look like this when I export it to csv. 我希望将其导出到csv时看起来像这样。
Use concat
with dict comprehension
, convert MultiIndex
to columns by reset_index
and last rename
columns: 将
concat
与dict comprehension
一起使用,通过reset_index
将MultiIndex
转换为列,并最后rename
列:
d = { '11457': { 'Client Orders': { 'Z07640C': 422,
'Z04276B': 93,
'Z15421A': 178,
'Z77679': 4},
'Name': 'SANDY',
'Total Orders': 697},
'1191': { 'Client Orders': { 'Z03456B': 101,
'Z10424A': 754,
'Z10453SR': 84,
'Z13454': 658,
'Z13846': 279},
'Name': 'Deep',
'Total Orders': 1876},
'13139': { 'Client Orders': { 'Z32421A': 2,
'Z43487B': 24,
'Z44411LR': 6,
'Z54611SR': 2},
'Name': 'Sran',
'Total Orders': 34}}
d1 = {'level_0':'Code','level_1':'Trading Account'}
df = pd.concat({k: pd.DataFrame(v) for k,v in d.items()}).reset_index().rename(columns=d1)
print (df)
Code Trading Account Client Orders Name Total Orders
0 11457 Z04276B 93 SANDY 697
1 11457 Z07640C 422 SANDY 697
2 11457 Z15421A 178 SANDY 697
3 11457 Z77679 4 SANDY 697
4 1191 Z03456B 101 Deep 1876
5 1191 Z10424A 754 Deep 1876
6 1191 Z10453SR 84 Deep 1876
7 1191 Z13454 658 Deep 1876
8 1191 Z13846 279 Deep 1876
9 13139 Z32421A 2 Sran 34
10 13139 Z43487B 24 Sran 34
11 13139 Z44411LR 6 Sran 34
12 13139 Z54611SR 2 Sran 34
For export to csv
use to_csv
: 要导出到
csv
使用to_csv
:
df.to_csv(filename, index=False)
EDIT For remove duplicates need replace them to NaN
s, in to_csv are NaN
s omited: 编辑要删除重复项,需要将其替换为
NaN
,在to_csv中将省略NaN
:
mask = df['Code'].duplicated()
df[['Code', 'Name', 'Total Orders']] = df[['Code', 'Name', 'Total Orders']].mask(mask)
print (df)
Code Trading Account Client Orders Name Total Orders
0 11457 Z04276B 93 SANDY 697.0
1 NaN Z07640C 422 NaN NaN
2 NaN Z15421A 178 NaN NaN
3 NaN Z77679 4 NaN NaN
4 1191 Z03456B 101 Deep 1876.0
5 NaN Z10424A 754 NaN NaN
6 NaN Z10453SR 84 NaN NaN
7 NaN Z13454 658 NaN NaN
8 NaN Z13846 279 NaN NaN
9 13139 Z32421A 2 Sran 34.0
10 NaN Z43487B 24 NaN NaN
11 NaN Z44411LR 6 NaN NaN
12 NaN Z54611SR 2 NaN NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.