[英]Pandas groupby two columns and count shared values in third
在 Pandas 中,我想对两列进行分组并计算共享的第三列值的数量。 随着对更大共享的偏好的增加。
在下面的 dataframe 中,对 col1 值进行分组,对 col2 值进行分组,并计算 col2 值共享 col3 值的频率。
结果是:ID1 和 ID2 共享一个 col3 值 (2)。 ID3 与 none (1) 共享。 但是,ID1、ID2 和 ID4 也共享一个值 (3)。 由于 ID1 和 ID2 已经共享一个值,因此采用两个 ID 和更多 ID 共享的值 (3)。 因此答案是3,1。 计数列表必须始终 = 唯一的 col2 值。
col1 | 列2 | 列3 |
---|---|---|
一种 | ID1 | 15 |
一种 | ID1 | 16 |
一种 | ID1 | 12 |
一种 | ID2 | 15 |
一种 | ID2 | 12 |
一种 | ID3 | 18 |
一种 | ID4 | 19 |
一种 | ID4 | 12 |
如果我对你的理解正确,我想你想按col3
而不是col2
分组:
df = pd.read_html('https://stackoverflow.com/q/69419264/14277722')[0]
df = df.groupby(['col1','col3'])['col2'].apply(list).reset_index()
df['count'] = df['col2'].apply(len)
然后,您可以删除col2
是另一行的子集的行,其中包含以下内容:
arr = pd.get_dummies(df['col2'].explode()).max(level=0).to_numpy()
subsets = np.matmul(arr, arr.T)
np.fill_diagonal(subsets, 0)
mask = ~np.equal(subsets, np.sum(arr, 1)).any(0)
df = df[mask]
col1 col3 col2 count
0 A 12 [ID1, ID2, ID4] 3
3 A 18 [ID3] 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.