按两列排序,并在第三列中计算共享值

2024-10-06 07:43:22 发布

您现在位置:Python中文网/ 问答频道 /正文

在Pandas中,我希望按两列分组,并计算共享的第三列值的数量。加上对更多共享的偏好

在下面的数据框中,将col1值分组,col2值分组,并计算col2值共享col3值的频率

结果是:ID1&;ID2共享一个col3值(2)。ID3股份,无(1)。但是,ID1、ID2和ID4也共享一个值(3)。如ID1&;ID2已经共享了一个值—获取ID和更多ID共享的值(3)。因此答案是3,1。计数列表必须始终=nunique col2值

^{tb1}$

Tags: 数据答案idpandas数量col2col3col1
1条回答
网友
1楼 · 发布于 2024-10-06 07:43:22

如果我理解正确,我认为您希望按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是另一行the following的子集的行:

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     

相关问题 更多 >