我有一个像这样的pandas DataFrame:
@Echo Off
Set "RR=HKCU"
Set "RK=Software\Microsoft\Windows\CurrentVersion\Internet Settings"
Set "RV=ProxyEnable"
Reg Query "%RR%\%RK%" /F 1 /E /T REG_DWORD|Find /I "%RV%">Nul 2>&1||(
Reg Add "%RR%\%RK%" /V "%RV%" /T REG_DWORD /D 0x1 /F>Nul)
我需要将其转换为:
ID Assigned
0 123 [{'COD': 990, 'NAME': 'Alice'}]
1 456 [{'COD': 990, 'NAME': 'Alice'}, {'COD': 991, 'NAME': 'Bob'}]
如果列表中只有一个我知道的元素(来自其他SO答案)我可以做类似
的事情ID COD NAME
123 990 Alice
456 990 Alice
456 991 Bob
但我仍然坚持如何处理pd.DataFrame(df['Assigned'].apply(lambda x: x[0]).tolist())
列中的列表包含多个词典(如第二行)中的情况。
答案 0 :(得分:1)
这是一个解决方案:
df=df.set_index('ID').Assigned.apply(pd.Series).stack().reset_index().drop('level_1',axis=1)
pd.concat([df,df[0].apply(pd.Series)],axis=1)
Out[78]:
ID 0 COD NAME
0 123 {'COD': 990, 'NAME': 'Alice'} 990 Alice
1 456 {'COD': 990, 'NAME': 'Alice'} 990 Alice
2 456 {'COD': 991, 'NAME': 'Bob'} 991 Bob
数据输入:
df=pd.DataFrame({'ID':[123,456],'Assigned':[[{'COD': 990, 'NAME': 'Alice'}],[{'COD': 990, 'NAME': 'Alice'}, {'COD': 991, 'NAME': 'Bob'}]]})
答案 1 :(得分:1)
另一种基于numpy的选项并应用pd.DataFrame即
ids = df['ID'][np.arange(len(df)).repeat(df.Assigned.str.len(), 0)]
ndf = pd.concat(df['Assigned'].apply(pd.DataFrame).values,0).set_index(ids).reset_index()
输出:
ID COD NAME 0 123 990 Alice 1 456 990 Alice 2 456 991 Bob