如何根据字典键从嵌套字典创建多个新的数据框列

Pra*_*nab 0 python dictionary dataframe pandas

基于这个问题,从这个数据框开始:

import pandas as pd
data = {'key':[111, 112, 113, 114],'other_data':[1, 2, 5, 7]}
df = pd.DataFrame(data)
Run Code Online (Sandbox Code Playgroud)

df

   key  other_data
0  111           1
1  112           2
2  113           5
3  114           7
Run Code Online (Sandbox Code Playgroud)

我想根据字典键和数据框中的一个指定列映射多个新列。

d = {
    "111": {
        "en": 4,
        "es": 2
    },
    "112": {
        "en": 1,
        "es": 8
    },
    "113": {
        "en": 0,
        "es": 11
    },
    "114": {
        "en": 2,
        "es": 3
    }
}
Run Code Online (Sandbox Code Playgroud)

预期的输出数据帧是

key,other_data,en,es
111,1,4,2
112,2,1,8
113,5,0,11
114,7,2,3
Run Code Online (Sandbox Code Playgroud)

数据帧很大,因此如果可能,我更愿意在一个循环或操作中执行此操作。

我尝试了map()和 的各种组合,apply()但无法使其正常工作。

jez*_*ael 5

DataFrame从字典创建,转置并将索引转换为整数以匹配keyDataFrame.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
Run Code Online (Sandbox Code Playgroud)

谢谢@ThePyGuy 建议使用DataFrame.from_dict

df = df.join(pd.DataFrame.from_dict(d, orient='index').rename(index=int), on='key')
Run Code Online (Sandbox Code Playgroud)

  • 我认为`pd.DataFrame.from_dict(d, orient='index')` 会比创建数据帧然后转置更好。 (3认同)