如何根据字典键从嵌套字典创建多个新的数据框列
基于这个问题,从这个数据框开始:
import pandas as pd
data = {'key':[111, 112, 113, 114],'other_data':[1, 2, 5, 7]}
df = pd.DataFrame(data)
df
key other_data
0 111 1
1 112 2
2 113 5
3 114 7
我想根据字典键和数据框中的一个指定列映射多个新列。
d = {
"111": {
"en": 4,
"es": 2
},
"112": {
"en": 1,
"es": 8
},
"113": {
"en": 0,
"es": 11
},
"114": {
"en": 2,
"es": 3
}
}
预期的输出数据帧是
key,other_data,en,es
111,1,4,2
112,2,1,8
113,5,0,11
114,7,2,3
数据帧很大,因此如果可能,我更愿意在一个循环或操作中执行此操作。
我尝试了map()和 的各种组合,apply()但无法使其正常工作。
回答
DataFrame从字典创建,转置并将索引转换为整数以匹配key列DataFrame.join(需要相同的类型):
df = df.join(pd.DataFrame(d).T.rename(index=int), on='key')
print (df)
key other_data en es
0 111 1 4 2
1 112 2 1 8
2 113 5 0 11
3 114 7 2 3
谢谢@ThePyGuy 建议使用DataFrame.from_dict:
df = df.join(pd.DataFrame.from_dict(d, orient='index').rename(index=int), on='key')
- 我认为`pd.DataFrame.from_dict(d, orient='index')` 会比创建数据帧然后转置更好。