1 回答

TA貢獻1909條經驗 獲得超7個贊
使用Index.str.split
withexpand=True
創建MultiIndex
列,然后在字典理解中遍歷level=0
列并使用DataFrame.to_dict
with?orient=records
:
df.columns = df.columns.str.split('/', expand=True)
dct = {k: df[k].to_dict('r') for k in df.columns.levels[0]}
例子:
print(df)
? user/username user/email user/name address/country address/city
0? ? ? ? ? ? A1? ? ? ? ?B1? ? ? ? C1? ? ? ? ? ? ? D1? ? ? ? ? ?E1
1? ? ? ? ? ? A2? ? ? ? ?B2? ? ? ? C2? ? ? ? ? ? ? D2? ? ? ? ? ?E2
print(dct)
{
? ? 'address': [
? ? ? ? {'city': 'E1', 'country': 'D1'},
? ? ? ? {'city': 'E2', 'country': 'D2'}
? ? ],
? ? 'user': [
? ? ? ? {'email': 'B1', 'name': 'C1', 'username': 'A1'},
? ? ? ? {'email': 'B2', 'name': 'C2', 'username': 'A2'}
? ? ]
}
編輯:如果數據框中的每一行需要嵌套字典,頂級鍵為user和address:
from collections import defaultdict
def f(df):
? ? df = df.set_axis(
? ? ? ? df.columns.str.split('/', expand=True), 1)
? ? for d in df.to_dict('r'):
? ? ? ? dct = defaultdict(dict)
? ? ? ? for x, y in d:
? ? ? ? ? ? dct[x][y] = d[(x, y)]
? ? ? ? yield dict(dct)
dcts = list(f(df))
結果:
print(dcts)
[
? ? {
? ? ? ? 'user': {'username': 'A1', 'email': 'B1', 'name': 'C1'},
? ? ? ? 'address': {'country': 'D1', 'city': 'E1'}
? ? },
? ? {
? ? ? ? 'user': {'username': 'A2', 'email': 'B2', 'name': 'C2'},
? ? ? ? 'address': {'country': 'D2', 'city': 'E2'}
? ? }
]
添加回答
舉報