问题描述
updated_at values user_id
0 2020-08-18 [{'value': 3742,'key': '0'},178414113
{'value': 3813,'key': '1'},{'value': 3918,'key': '2'},{'value': 2956,'key': '3'}]
1 2020-08-19 [{'value': 3542,152285823
{'value': 2563,{'value': 3218,{'value': 2152,'key': '3'}]
我要这样转换。
updated_at值键user_id
0 2020-08-18 3742 0 178414113
1 2020-08-18 3813 1 178414113
2 2020-08-18 3918 2 178414113
3 2020-08-18 2956 3 178414113
4 2020-08-19 3542 0 152285823
5 2020-08-19 2563 1 152285823
6 2020-08-19 3218 2 152285823
7 2020-08-19 2152 3 152285823
请帮助我。 我尝试过
data_new = pd. Data Frame ( data ['values'].values. to list(),index= data. index)
但是没有用。
解决方法
您可以使用explode()
方法将列表列扩展为这些列表中每个条目的单独行。然后,您可以利用apply(pd.Series)
在每一行中扩展结果字典:
exploded = df.explode('values').reset_index(drop=True)
exploded[['value','key']] = exploded['values'].apply(pd.Series)
exploded.drop('values',axis=1,inplace=True)
收益:
updated_at user_id value key
0 2020-08-18 178414113 3742 0
1 2020-08-18 178414113 3813 1
2 2020-08-18 178414113 3918 2
3 2020-08-18 178414113 2956 3
4 2020-08-19 152285823 3542 0
5 2020-08-19 152285823 2563 1
6 2020-08-19 152285823 3218 2
7 2020-08-19 152285823 2152 3