Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对于B列中的每个唯一值,可以获取A列中的唯一值列表_Python_Pandas_List_Sorting_Dataframe - Fatal编程技术网

Python 对于B列中的每个唯一值,可以获取A列中的唯一值列表

Python 对于B列中的每个唯一值,可以获取A列中的唯一值列表,python,pandas,list,sorting,dataframe,Python,Pandas,List,Sorting,Dataframe,我发现这个问题很容易写出来,但很难应用到我的熊猫数据框架中。 当搜索任何“唯一值”和“列表”时,我只得到在列表中获取唯一值的答案 有一个具有双for循环的蛮力解决方案,但必须有一个比n^2更快的解决方案 我有一个包含两列的数据框:Name和Likes Food 作为输出,我希望为每个唯一的名称提供一个独特的食物值列表 数据帧df示例 Index Name Likes Food 0 Tim Pizza 1 Mar

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

有一个具有双for循环的蛮力解决方案,但必须有一个比n^2更快的解决方案

我有一个包含两列的数据框:Name和Likes Food

作为输出,我希望为每个唯一的名称提供一个独特的食物值列表

数据帧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]


>>>
索引名称喜欢食物列表
0 Tim 3[比萨饼、意大利面、寿司]
1玛丽2[比萨饼,寿司]
2艾米2[比萨饼,红薯]
3约翰1[比萨饼]

要获得不带计数的输出,请尝试

此外,您还可以使用


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

此外,您还可以使用


要同时对这两列进行排序,请尝试以下操作:

df = df.groupby("Name")["Likes_Food"].aggregate({'counts': 'nunique',
                                            'food_list': 'unique'}).reset_index().sort_values(by='counts', ascending=False)
df
   Name  counts               food_list
3    Tim       3   [Pizza, Pasta, Sushi]
0    Amy       2  [Pizza, SweetPotatoes]
2  Marie       2          [Pizza, Sushi]
1   John       1                 [Pizza]

要同时对这两列进行排序,请尝试以下操作:

df = df.groupby("Name")["Likes_Food"].aggregate({'counts': 'nunique',
                                            'food_list': 'unique'}).reset_index().sort_values(by='counts', ascending=False)
df
   Name  counts               food_list
3    Tim       3   [Pizza, Pasta, Sushi]
0    Amy       2  [Pizza, SweetPotatoes]
2  Marie       2          [Pizza, Sushi]
1   John       1                 [Pizza]

另外,如果熊猫
.25
+,你可以尝试
df.groupby('Name',sort=False.).agg(Likes_Food=('Likes','nunique')、Food_List=('Likes','unique'))
@Quickbeam2k1你应该使用
nunique
而不是
size
,如果你明白这很有效的话。谢谢我要花很长时间来学习这个语法…如果pandas
.25
+,你可以尝试
df.groupby('Name',sort=False.).agg(Likes_Food=('Likes','nunique')、Food_List=('Likes','unique'))
@Quickbeam2k1如果你知道这很有效的话,你应该使用
nunique
而不是
size
。谢谢我要花很长时间来学习这个语法。。。
df = df.groupby("Name")["Likes_Food"].aggregate({'counts': 'nunique',
                                            'food_list': 'unique'}).reset_index().sort_values(by='counts', ascending=False)
df
   Name  counts               food_list
3    Tim       3   [Pizza, Pasta, Sushi]
0    Amy       2  [Pizza, SweetPotatoes]
2  Marie       2          [Pizza, Sushi]
1   John       1                 [Pizza]