我有以下形式的数据:
df = pd.DataFrame({
'group': [1, 1, 2, 3, 3, 3, 4],
'param': ['a', 'a', 'b', np.nan, 'a', 'a', np.nan]
})
print(df)
# group param
# 0 1 a
# 1 1 a
# 2 2 b
# 3 3 NaN
# 4 3 a
# 5 3 a
# 6 4 NaN
Run Code Online (Sandbox Code Playgroud)
组内的非空值始终相同.我想为每个组(它存在的位置)计算一次非空值,然后查找每个值的总计数.
我目前正在以下(笨重和低效)的方式做到这一点:
param = []
for _, group in df[df.param.notnull()].groupby('group'):
param.append(group.param.unique()[0])
print(pd.DataFrame({'param': param}).param.value_counts())
# a 2
# b 1
Run Code Online (Sandbox Code Playgroud)
我确信有一种方法可以更干净地完成这项工作并且不使用循环,但我似乎无法解决这个问题.任何帮助将非常感激.
我有一个像这样的数据框
>>> df = pd.DataFrame({'user_id':['a','a','s','s','s'],
'session':[4,5,4,5,5],
'revenue':[-1,0,1,2,1]})
>>> df
revenue session user_id
0 -1 4 a
1 0 5 a
2 1 4 s
3 2 5 s
4 1 5 s
Run Code Online (Sandbox Code Playgroud)
和会话和收入的每个值代表了一种类型的,我要统计每个种类的数量表示的数量revenue=-1和session=4的user_id=a为1.
我发现简单的调用count()函数,因为groupby()无法输出我想要的结果.
>>> df.groupby('user_id').count()
revenue session
user_id
a 2 2
s 3 3
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?