python - Pandas 获取 A 列中 B 列中每个唯一值的唯一值列表

标签 python pandas list sorting dataframe

我发现这个问题很容易写出来,但很难用我的 Pandas Dataframe 来应用。 当搜索任何“唯一值”和“列表”时,我只能得到获取列表中唯一值的答案。

有一个带有双 for 循环的强力解决方案,但一定有比 n^2 更快的 Pandas 解决方案。

我有一个包含两列的数据框:名称和喜欢的食物。

作为输出,我想要每个唯一名称的唯一喜欢食物值列表。

示例数据框 df

Index        Name       Likes Food

0            Tim        Pizza
1            Marie      Pizza
2            Tim        Pasta
3            Tim        Pizza
4            John       Pizza
5            Amy        Pizza
6            Amy        Sweet Potatoes
7            Marie      Sushi
8            Tim        Sushi

我知道如何根据“喜欢食物”的唯一计数进行聚合和分组:

df.groupby( by='Name', as_index=False ).agg( {'Likes Food': pandas.Series.nunique} )
df.sort_values(by='Likes Food', ascending=False)
df.reset_index( drop=True )
>>>
Index        Name       Likes Food

0            Tim        3
1            Marie      2
2            Amy        2
3            John       1

但是考虑到这一点,该数据框中每个名称的食物是什么?为了可读性,以列表的形式表达是很有意义的。列表排序并不重要(并且可能很容易修复)。

示例输出

<code here>
>>>
Index        Name       Likes Food    Food List

0            Tim        3             [Pizza, Pasta, Sushi]
1            Marie      2             [Pizza, Sushi]
2            Amy        2             [Pizza, Sweet Potatoes]
3            John       1             [Pizza]

最佳答案

要获得没有计数的输出,只需尝试 unique

df.groupby("Name")["Likes"].unique()
Name
Amy             [Pizza, Sweet Potatoes]
John                            [Pizza]
Marie                    [Pizza, Sushi]
Tim               [Pizza, Pasta, Sushi]
Name: Likes, dtype: object

此外,您还可以使用named aggregation

df.groupby("Name").agg(**{"Likes Food": pd.NamedAgg(column='Likes', aggfunc="size"),
                          "Food List": pd.NamedAgg(column='Likes', aggfunc="nunique")}).reset_index()
    Name  Likes Food              Food List
0    Amy           2         [Pizza, Sweet Potatoes]
1   John           1                         [Pizza]
2  Marie           2                  [Pizza, Sushi]
3    Tim           3           [Pizza, Pasta, Sushi]

关于python - Pandas 获取 A 列中 B 列中每个唯一值的唯一值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58858374/

相关文章:

python - 定义趋势 Pandas / python

python - 从使用 apply() 方法的数据框中,如何返回包含数据框中元素列表的新列?

Python:获取元组列表中的最小整数

python - 查找列表中的所有最小元素或设置为由函数加权

python 值与引用

python - 如何在Python中化简分数?

python - pandas groupby 索引 : nan conflicts or take only value

python - (重新)在 Django View 中使用字典

python - wxpython中的wxThumbnailCtrl如何使用?

Python 更改另一个模块中的模块变量