Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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熊猫:如何根据多个列分组并计算唯一值?_Python_Pandas_Group By_Unique - Fatal编程技术网

Python熊猫:如何根据多个列分组并计算唯一值?

Python熊猫:如何根据多个列分组并计算唯一值?,python,pandas,group-by,unique,Python,Pandas,Group By,Unique,我有datafarme df: id name number 1 sam 76 2 sam 8 2 peter 8 4 jack 2 我想按“id”列分组,并根据(名称、编号)对计算唯一值的数量 我尝试过这个,但不起作用: df.groupby('id')[('number','name')].nunique().reset_index() 你可以做: import pandas df = pandas.DataFrame({"id": [1, 2, 3, 4], "nam

我有datafarme df:

id name number
1 sam   76
2 sam    8
2 peter  8 
4 jack   2
我想按“id”列分组,并根据(名称、编号)对计算唯一值的数量

我尝试过这个,但不起作用:

df.groupby('id')[('number','name')].nunique().reset_index()
你可以做:

import pandas
df = pandas.DataFrame({"id": [1, 2, 3, 4], "name": ["sam", "sam", "peter", "jack"], "number": [8, 8, 8, 2]})
g = df.groupby(["name", "number"])
print g.groups
for p in g.groups: 
    print p, " has ", len(g.groups[p]), " entries"
其中:

{('jack', 2): [3], ('peter', 8): [2], ('sam', 8): [0, 1]}
('peter', 8)  has  1  entries
('jack', 2)  has  1  entries
('sam', 8)  has  2  entries
要获取每对的唯一条目数,可以执行以下操作:

import pandas
df = pandas.DataFrame({"id": [1, 2, 3, 4], "name": ["sam", "sam", "peter", "jack"], "number": [8, 8, 8, 2]})
g = df.groupby(["name", "number"])
print g.groups
for p in g.groups: 
    print p, " has ", len(g.groups[p]), " entries"
其中:

{('jack', 2): [3], ('peter', 8): [2], ('sam', 8): [0, 1]}
('peter', 8)  has  1  entries
('jack', 2)  has  1  entries
('sam', 8)  has  2  entries
更新:

OP要求在数据帧中显示结果。一种方法是将
aggregate
与length函数一起使用,该函数将返回一个数据帧,其中每个数据帧对具有唯一条目数:

d = g.aggregate(len)
print d.reset_index().rename(columns={"id": "num_entries"})
给出:

    name  number  num_entries
0   jack       2           1
1  peter       8           1
2    sam       8           2
试一试


要获取列组合的唯一值列表,请执行以下操作:

grouped= df.groupby('name').number.unique()
for k,v in grouped.items():
    print(k)
    print(v)
输出:

jack
[2]
peter
[8]
sam
[76  8]
number  2   8   76
name            
jack    1.0 0.0 0.0
peter   0.0 1.0 0.0
sam     0.0 1.0 1.0
要基于另一列获取一列的值数,请执行以下操作:

df.groupby('name').number.value_counts().unstack().fillna(0)
输出:

jack
[2]
peter
[8]
sam
[76  8]
number  2   8   76
name            
jack    1.0 0.0 0.0
peter   0.0 1.0 0.0
sam     0.0 1.0 1.0

您只需组合两个
groupby
s即可获得所需的结果

import pandas
df = pandas.DataFrame({"id": [1, 2, 2, 4], "name": ["sam", "sam", "peter", "jack"], "number": [8, 8, 8, 2]})
group = df.groupby(['id','name','number']).size().groupby(level=0).size()
第一个
groupby
将计算原始组合的完整集合(从而使要计算的列唯一)。第二个
groupby
将根据您想要的列计算唯一的发生次数(您可以使用第一个
groupby
将该列放入索引的事实)

结果将是一系列。如果希望DataFrame具有正确的列名(如您在所需结果中所示),则可以使用
aggregate
函数:

group = df.groupby(['id','name','number']).size().groupby(level=0).agg({'count(name-number':'size'})

谢谢你的回答。我更希望我能用一个python熊猫把戏和一个数据帧来实现它,你知道怎么做吗?你知道我怎么才能得到唯一的组吗?因为目前的纸条上也有重复的部分,我才意识到你的答案并没有回答我的问题。因为我想知道每个id的唯一(名称,数字)对的数量。您所编码的代码给出了每个(名称,数字)对的条目数量,这是熊猫数据帧中分组和计数的最佳答案。/@User您的表没有意义,计数1为1,它应该为2,有2个数字2,2个“山姆,还有2尺8寸。请给出一个清晰的示例数据和输出。