![](/img/trans.png)
[英]How can i fix "(df[df['id']==id_value].name == 1).any()" 'The truth value of a Series is ambiguous error'?
[英]how can i divide grouped masked id by a value that is in another df (the df contains a value for each masked id )
df = pd.DataFrame([[1,'A', 4], [1,'B', 2], [2,'C', 5], [2,'A', 5], [3,'B', 2]],
columns=['maskedid ', 'test ', 'value'])
maskedid test value
1 A 4
1 B 2
2 C 5
2 A 5
3 B 2
我想按 'maskedid' 和 'test' 分组并运行 .describe () 我为了找到计数并将计数输出除以来自另一个数据帧的值。 #每个被屏蔽的 id 都有自己的值。
df 具有以下值
maskedid value
1 5
2 6
3 7
我的理解是您想要生成.describe()
信息并划分由其他数据帧 ( df2
) 生成的数据。 你可以这样实现:
df.groupby(['maskedid', 'test']).describe()
value
count mean std min 25% 50% 75% max
maskedid test
1 A 1.0 4.0 NaN 4.0 4.0 4.0 4.0 4.0
B 1.0 2.0 NaN 2.0 2.0 2.0 2.0 2.0
2 A 1.0 5.0 NaN 5.0 5.0 5.0 5.0 5.0
C 1.0 5.0 NaN 5.0 5.0 5.0 5.0 5.0
3 B 1.0 2.0 NaN 2.0 2.0 2.0 2.0 2.0
然后,除以df2
匹配的maskedid
为:
df.groupby(['maskedid', 'test']).describe().div(df2.set_index('maskedid')['value'], axis=0, level=0)
结果:
value
count mean std min 25% 50% 75% max
maskedid test
1 A 0.200000 0.800000 NaN 0.800000 0.800000 0.800000 0.800000 0.800000
B 0.200000 0.400000 NaN 0.400000 0.400000 0.400000 0.400000 0.400000
2 A 0.166667 0.833333 NaN 0.833333 0.833333 0.833333 0.833333 0.833333
C 0.166667 0.833333 NaN 0.833333 0.833333 0.833333 0.833333 0.833333
3 B 0.142857 0.285714 NaN 0.285714 0.285714 0.285714 0.285714 0.285714
使用的输入
df = pd.DataFrame([[1,'A', 4], [1,'B', 2], [2,'C', 5], [2,'A', 5], [3,'B', 2]],
columns=['maskedid', 'test', 'value'])
maskedid test value
0 1 A 4
1 1 B 2
2 2 C 5
3 2 A 5
4 3 B 2
df2 = pd.DataFrame({'maskedid': [1, 2, 3], 'value': [5, 6, 7]})
maskedid value
0 1 5
1 2 6
2 3 7
如果我理解正确,您可以简单地合并 df 和 df2(另一个数据帧)、groupby maskedid 并计算您的组长度除以另一个数据帧的值:
(df.merge(df2, on='maskedid')
.groupby('maskedid', as_index=False)
.apply(lambda x: len(x)/x['value_y'])
)
输出:
0 0 0.400000
1 0.400000
1 2 0.333333
3 0.333333
2 4 0.142857
注意。 我在这里只按 'maskedid' 分组,否则只会有 1 组,但您可以按 ['maskedid', 'test'] 分组
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.