如何使字典键是熊猫数据框的一列?

astro123

我有一个数据框,其中一列包含带字典的字符串化列表。我想知道如何从这些字典键中创建新列。

我正在寻找使用pandas方法的解决方案,例如apply stack etc,尽量不要使用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没有相同的值。另外,我不确定如何移动column的值name来替换columncount并删除其他不需要的列。

最终的通缉方案

speaker   views Funny Sad Happy
Einstein  1000 100   110 120  
Newton    2000 210   220 200

帮助非常感谢!

更新
我正在使用Pands 0.20,但.explode()我的工作场所中没有该方法,因此我不允许更新熊猫。

安迪(Andy L.)

您可以使用sumindex.repeat建立一个新的数据帧,并加入它df[['speaker', 'views']],并把它分配给df1接下来set_indexunstackreset_index

df['ratings'] = df['ratings'].apply(ast.literal_eval)
df1 = (pd.DataFrame(df.ratings.sum(), index=df.index.repeat(df.ratings.str.len()))
                   .drop('id', 1).join(df[['speaker', 'views']]))
df1.set_index(['speaker', 'views', 'name'])['count'].unstack().reset_index()

Out[213]:
name   speaker  views  Funny  Happy  Sad
0     Einstein  1000   100    120    110
1     Newton    2000   210    200    220

注意name最终输出中是列轴的标签。如果您不想看到它,只需rename_axis按如下所示附加其他链接

df1.set_index(['speaker', 'views', 'name'])['count'].unstack().reset_index() \
                                                    .rename_axis([None], axis=1)

Out[214]:
    speaker  views  Funny  Happy  Sad
0  Einstein  1000   100    120    110
1  Newton    2000   210    200    220

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫:当键是数据框的索引时,从字典中向数据框添加一列

对于具有一列键和一列值的熊猫数据框,请制作另一列字典

如何拆分多索引数据框,其中一列包含不同键的字典

如何删除熊猫数据框的最后一列数据

如何洗牌熊猫数据框的每一列?

如何从一列中排序熊猫数据框

如何根据唯一列组合熊猫数据框

从数据框创建嵌套字典,其中第一列是父字典的键

如何检查熊猫数据框中一列对另一列的依赖性

如何调节一列的循环以填充熊猫数据框中的另一列值

使用字典参考另一列值来映射熊猫数据框的一列中的缺失值

将字典列表转换为数据框,其中一列用于键,一列用于值

将 Pandas 数据框转换为以第一列为键的字典

如何过滤数据框并根据熊猫数据框中的另一列获取记录总数?

如何将字典的键转换为一栏式的熊猫数据框?

从嵌套字典创建一个熊猫数据框,行索引作为字典键和一个字典,每个键具有不同的列

如何比较数据框(熊猫)中同一列的数据

如何将数据从熊猫数据框的一列拆分为新数据框的多列

熊猫数据框分组列的一列差异图

从数据框中创建一个字典,第一列作为键,其余作为值

如何使用熊猫数据框将所有列合并为一列?

如何用熊猫数据框另一列中的句子部分创建新列?

熊猫如何基于两列合并两个数据框并更新下一列?

Python:如何在两列之间的熊猫数据框中添加一列?

如何将数据框列拆分为熊猫中的另一列?

如何删除熊猫数据框列中与另一列中的单词匹配的单词

使用熊猫,如果另一列不为空,如何使用数据框查找列值?

如何在熊猫数据框中将两列合并为一列

如何将数据框中的一列分成多列?[蟒蛇,熊猫]