我有一个样本DF:
df = pd.DataFrame(np.random.randint(1,10,size=(6,3)),columns = list("ABC"))
df["A"] = ["1111","2222","1111","1111","2222","1111"]
df["B"] = ["20010101","20010101","20010101","20010101","20010201","20010201"]
df
OP:
A B C
0 1111 20010101 1
1 2222 20010101 8
2 1111 20010101 1
3 1111 20010101 3
4 2222 20010201 7
5 1111 20010201 8
我试图用A列的grouby来查找B列的均值:
例如:
请考虑A列中的值“ 1111”:总交易次数:4,唯一交易次数:2(20010101、20010201)。所以平均值是4/2 = 2
摘要:
df.groupby("A",as_index=False).agg({"B":'mean'})
错误:
DataError: No numeric types to aggregate
任何熊猫方法都可以直接找到该平均值,而无需进行groupby和迭代。
答案 0 :(得分:1)
我不认为您要寻找的是“均值”。试试这个:
df.groupby('A')['B'].apply(lambda x: x.count() / x.nunique())
A
1111 2.0
2222 1.0
Name: B, dtype: float64
或者,如果您特别声明不使用Apply,那么
grp = df.groupby('A')['B']
grp.count() / grp.nunique()
A
1111 2.0
2222 1.0
Name: B, dtype: float64
这是上面的一个衬板,该衬板使用agg
和许多异径管:
df.groupby('A')['B'].agg(['count','nunique']).eval('count / nunique')
A
1111 2.0
2222 1.0
dtype: float64