【发布时间】:2019-12-21 08:15:57
【问题描述】:
我有一个数据框,其中一列包含包含字典的字符串化列表。我想知道如何从这些字典键中创建新列。
我正在寻找使用像 apply stack etc 这样的 pandas 方法的解决方案,并且尽可能不使用 FOR LOOP。
问题来了:
speakers = ['Einstein','Newton']
views = [1000,2000]
ratings0 = ("[{'id': 7, 'name': 'Funny', 'count': 100}, {'id': 1, 'name': 'Sad', "
"'count': 110}, {'id': 9, 'name': 'Happy', 'count': 120}]")
ratings1 = ("[{'id': 7, 'name': 'Happy', 'count': 200}, {'id': 3, 'name': 'Funny', "
"'count': 210}, {'id': 2, 'name': 'Sad', 'count': 220}]")
ratings = [ratings0, ratings1]
df = pd.DataFrame({'speaker': speakers, 'ratings': ratings,'views':views})
print(df)
speaker ratings views
0 Einstein [{'id': 7, 'name': 'Funny', 'count': 100}, {'i... 1000
1 Newton [{'id': 7, 'name': 'Happy', 'count': 200}, {'i... 2000
到目前为止我的尝试,
# new dataframe only for ratings
dfr = df['ratings'].apply(ast.literal_eval)
dfr = dfr.apply(pd.DataFrame)
dfr = dfr.apply(lambda x: x.sort_values(by='name'))
dfr = dfr.apply(pd.DataFrame.stack)
print(dfr)
0 1 2
count id name count id name count id name
0 100 7 Funny 110 1 Sad 120 9 Happy
1 200 7 Happy 210 3 Funny 220 2 Sad
这提供了多索引数据框。我尝试对字典进行排序,但仍然没有排序,name 列没有相同的值。另外,我不确定如何移动列 name 的值以替换列 count 并删除其他不需要的列。
最终通缉解决方案
speaker views Funny Sad Happy
Einstein 1000 100 110 120
Newton 2000 210 220 200
更新
我正在使用 Pandas 0.20,我的工作场所没有 .explode() 方法,并且不允许我更新 Pandas。
【问题讨论】: