我知道我们可以在groupby列上使用.nunique()来查找列中的唯一元素数,如下所示:
df = pd.DataFrame({'c1':['foo', 'bar', 'foo', 'foo'], 'c2': ['A', 'B', 'A', 'B'], 'c3':[1, 2, 1, 1]})
c1 c2 c3
0 foo A 1
1 bar B 2
2 foo A 1
3 foo B 1
df.groupby('c1')['c2'].nunique()
c1
bar 1
foo 2
Name: c2, dtype: int64
但是,现在我有一个包含多个列的groupby对象,有没有办法找出唯一行的数量?
df.groupby('c1')['c2', 'c3'].???
更新: 因此,我想要的最终结果是每个组中基于' c1'列,例如:
foo 2
bar 1
更新2: 这是一个新的测试数据框:
df = pd.DataFrame({'c1': ['foo', 'bar', 'foo', 'foo', 'bar'], 'c2': ['A'
, 'B', 'A', 'B', 'A'], 'c3': [1, 2, 1, 1, 1]})
答案 0 :(得分:1)
<强>更新强>
In [131]: df.groupby(['c1','c2','c3']).size().rename('count').reset_index()[['c1','count']].drop_duplicates(subset=['c1'])
Out[131]:
c1 count
0 bar 1
1 foo 2
OLD回答:
IIYC你需要这个:
In [43]: df.groupby(['c1','c2','c3']).size()
Out[43]:
c1 c2 c3
bar B 2 1
foo A 1 2
B 1 1
dtype: int64
答案 1 :(得分:0)
如果需要nunique
标题列c2
和c3
,则更容易使用:
df['c'] = df.c2 + df.c3.astype(str)
print (df.groupby('c1')['c'].nunique())
c1
bar 1
foo 2
Name: c, dtype: int64
groupby
Series
c
或df.c1
列c = df.c2.astype(str) + df.c3.astype(str)
print (c.groupby([df.c1]).nunique())
c1
bar 2
foo 2
dtype: int64
:
TIMESTAMP_A=1472680800
TIMESTAMP_B=1458687600
if [[ ${TIMESTAMP_A} -lt ${TIMESTAMP_B} ]]; then
echo "Timestamp A is younger!";
else
echo "Timestamp B is younger!";
fi
答案 2 :(得分:0)
最后想出了如何做到这一点!
import pandas as pd
import numpy as np
df = pd.DataFrame({'c1': ['foo', 'bar', 'foo', 'foo', 'bar'],
'c2': ['A', 'B', 'A', 'B', 'A'],
'c3': [1, 2, 1, 1, 1]})
def check_unique(df):
return len(df.groupby(list(df.columns.values)))
print(df.groupby('c1').apply(check_unique))