我有以下形式的数据:
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
我相信有一种更简洁的方法可以做到这一点,而且不需要使用循环,但我似乎无法解决它。任何帮助将不胜感激。
df = pd.DataFrame({ 'group': [1, 1, 2, 3, 3, 3, 4], 'param': ['a', 'c', 'b', np.nan, 'c', 'a', np.nan] })
进行测试,但你的代码返回了不同的输出,因为它只使用了每个group
中第一个唯一元素的列表。我的代码返回所有唯一值。请检查一下,看看我是否理解了你的需求。谢谢。 - jezrael.reset_index()
。 - jezrael