我有一个数据框,其中一列包含包含字典的字符串化列表。我想知道如何从这些字典键生成新的列。你知道吗
我正在寻找使用pandas方法的解决方案,比如apply stack etc
,而不是尽可能地使用FOR循环。你知道吗
问题是:
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
非常感谢您的帮助!!你知道吗
更新
我使用的是pands0.20,我的工作场所没有.explode()
方法,不允许我更新pandas。你知道吗
对于
pandas >= 0.25.0
,可以使用ast.literal_eval
+explode
+pivot
对于旧版本的
pandas
因为循环并不总是坏的。你可以试一试:
提供:
您可以使用
sum
、index.repeat
来构造一个新的数据帧,并将其加入df[['speaker', 'views']]
并将其分配给df1
。接下来是set_index
、unstack
和reset_index
注意:
name
在最终输出中是列轴的标签。如果您不想看到它,只需按如下方式链接附加的rename_axis
相关问题 更多 >
编程相关推荐