最佳答案
我有以下表格的数据:
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
组内的非空值总是相同的。我想为每个组(存在它的地方)计算一次非空值,然后找到每个值的总计数。
我现在正在用下面的方法(笨拙而低效)做这件事:
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
我确信有一种方法可以更干净地完成这项工作,而且不需要使用循环,但我似乎就是不能解决这个问题。如果你能帮忙,我将不胜感激。