gpt4 book ai didi

python - Pandas GroupBy,将新的数字列表列与另一列数字列表进行比较

转载 作者:行者123 更新时间:2023-12-02 18:07:28 26 4
gpt4 key购买 nike

数据框如下面屏幕截图的左侧。

我想按名称分组,并找出缺少哪些数字(与 [1,2,3,4,5] 相比)。

理想的输出如屏幕截图右侧所示。

我尝试过以下代码。但是 GroupBy 之后的“星星数”列被视为字符串列表。因此它不执行比较。

如何修复它?

enter image description here

import pandas as pd
from io import StringIO

csvfile = StringIO("""
Name Number of stars
Benjamin 1,3,2,1,2
Benjamin 2,5,1,3
Emma 2,1,1,4,4,2
Ethan 2,5,4
Emma 2,2,2
Ethan 5,4,4,1,1,1
Olivia 4,1,3,5""")

df = pd.read_csv(csvfile, sep = '\t', engine='python')

df_1 = df.groupby('Name')['Number of stars'].apply(list)

df_1 = df_1.to_frame().reset_index()

df_1['all stars'] = pd.Series([list(range(1,6)) for x in range(len(df_1.index))])
df_1['diff'] = df_1['all stars'].map(set) - df_1['Number of stars'].map(set)

print (df_1)

输出:

   Name       Number of stars        all stars             diff
0 Benjamin [1,3,2,1,2, 2,5,1,3] [1, 2, 3, 4, 5] {1, 2, 3, 4, 5}
1 Emma [2,1,1,4,4,2, 2,2,2] [1, 2, 3, 4, 5] {1, 2, 3, 4, 5}
2 Ethan [2,5,4, 5,4,4,1,1,1] [1, 2, 3, 4, 5] {1, 2, 3, 4, 5}
3 Olivia [4,1,3,5] [1, 2, 3, 4, 5] {1, 2, 3, 4, 5}

最佳答案

让我们按名称对数据帧进行分组,并使用返回所需设置差异的自定义 lambda 函数聚合星数:

s = set(range(1, 6))
df.groupby('Name')['Number of stars']\
.agg(lambda x: s - set(int(z) for y in x for z in y.split(',')))

Name
Benjamin {4}
Emma {3, 5}
Ethan {3}
Olivia {2}
Name: Number of stars, dtype: object

关于python - Pandas GroupBy,将新的数字列表列与另一列数字列表进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72961864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com