熊猫groupby和字符串的平均值

时间:2019-04-12 21:39:16

标签: pandas pandas-groupby

我有一个样本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和迭代。

1 个答案:

答案 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