如何在Pandas中将单元格中的内容分解为多行?
ID CODES
A {"1407273790":5,"1801032636":20,"1174813554":1,"1215470448":2,"1053754655":4,"1891751228":1}
B {"1497066526":19,"1639360563":16,"1235107087":11,"1033522925":18}
C {"1154348191":8,"1568410355":4}如何将“”中的代码分解为多行?我正在查看的输出如下表所示
ID CODES
A 1407273790
A 1801032636
A 1174813554
A 1215470448
A 1053754655
A 1891751228
B 1497066526
B 1639360563
B 1235107087
B 1033522925
C 1154348191
C 1568410355发布于 2021-01-20 04:57:58
获取keys()后即可使用explode。keys()返回一个tuple,所以我使用[*]将其转换为一个列表,这是explode所需的格式。您也可以使用list()
df = pd.DataFrame({'ID' : ['A', 'B', 'C'],
'CODES' : [{"1407273790":5,"1801032636":20,"1174813554":1,"1215470448":2,"1053754655":4,"1891751228":1},
{"1497066526":19,"1639360563":16,"1235107087":11,"1033522925":18},
{"1154348191":8,"1568410355":4},]})
df['CODES'] = df['CODES'].apply(lambda x: [*x.keys()]) # or lambda x: list(x.keys()))
df = df.explode('CODES')
df
Out[1]:
ID CODES
0 A 1407273790
0 A 1801032636
0 A 1174813554
0 A 1215470448
0 A 1053754655
0 A 1891751228
1 B 1497066526
1 B 1639360563
1 B 1235107087
1 B 1033522925
2 C 1154348191
2 C 1568410355根据SammyWemmy的评论,您可以使用以下命令尝试两种方法的性能:
%timeit df['CODES'].apply(lambda x: list(x.keys()))
%timeit [entry.keys() for entry in df.CODES]https://stackoverflow.com/questions/65799353
复制相似问题