从pandas中的字典列表中提取元素

2024-09-26 18:10:23 发布

您现在位置:Python中文网/ 问答频道 /正文

在数据框的一列中,我对数据框的每一行都有以下分数:

[{'score': 100, 'bonus': 10}, {'score': 60, 'bonus': 0}]
[{'score': 80, 'bonus': 20}, {'score': 90, 'bonus': 30}]

输出

输出将是两个新列,用于每行的分数变化和奖金变化。所以第一行的df.delta_分数为-40,df.delta_奖金为-10,第二行的df.delta_分数为10,df.delta_奖金为10

[{'score': 100, 'bonus': 10}, {'score': 60, 'bonus': 0}, -40, -10]
[{'score': 100, 'bonus': 10}, {'score': 60, 'bonus': 0}, 10, 10]

我想计算每个人(行)的得分和奖金的值变化,并用结果值生成新列。我对这种数据类型很困惑,因为它似乎是一个字典列表,但由于每个字典都有相同的键,我想使用一个运算符来计算差异。任何帮助都将不胜感激


Tags: 数据df列表字典运算符差异分数delta
2条回答

我们可以做explode然后我们得到数据帧

s = df['Col'].explode()
calcu = pd.DataFrame(s.tolist(), index=s.index)
calcu
Out[170]: 
   score  bonus
0    100     10
0     60      0
1     80     20
1     90     30

在这之后你可以做什么

calcu.groupby(level=0)...(calculation follow by groupby)

我们只需创建两个新列BonusScore。您可以将列表理解与.get()结合使用,根据键bonusscore检索值。然后,通过下标[1]并减去[0]从第一个值减去第二个值

import pandas as pd
df = pd.DataFrame({'dict_col': [[{'score': 100, 'bonus': 10}, {'score': 60, 'bonus': 0}],
                                [{'score': 80, 'bonus': 20}, {'score': 90, 'bonus': 30}]]})
df['Bonus'] = df['dict_col'].apply(lambda x: [d.get('bonus') for d in x][1] - [d.get('bonus') for d in x][0])
df['Score'] = df['dict_col'].apply(lambda x: [d.get('score') for d in x][1] - [d.get('score') for d in x][0])
df
Out[1]: 
                                            dict_col  Bonus  Score
0  [{'score': 100, 'bonus': 10}, {'score': 60, 'b...    -10    -40
1  [{'score': 80, 'bonus': 20}, {'score': 90, 'bo...     10     10

相关问题 更多 >

    热门问题