python - Pandas 按两列分组并在第三列中计算共享值
问题描述
在 Pandas 中,我想按两列分组并计算共享了多少第三列值。随着对更大共享的偏好的增加。
在下面的数据框中,将 col1 值分组,将 col2 值分组并计算 col3 值与 col2 值共享的频率。
结果是:ID1 和 ID2 共享一个 col3 值 (2)。ID3 与无共享 (1)。但是,ID1、ID2 和 ID4 也共享一个值 (3)。由于 ID1 和 ID2 已经共享一个值,因此采用两个 ID 共享的值和更多 (3)。因此答案是 3,1。计数列表必须始终 = nunique col2 值。
col1 | col2 | col3 |
---|---|---|
一种 | 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
推荐阅读
- javascript - 我如何提醒();这个 JS 函数的结果?
- javascript - 在 lineChart React Native 中从数组传递数据
- config - 使用 sinon 模拟运行时配置值
- javascript - 如何使用 Vanilla JS 获取目录结构?
- c++ - 使用具有多个参数的构造函数显式初始化引用
- sql - 存在于多个选择中的 sql 选择列。选择与列表中所有值匹配的值
- laravel - 如何将 gitlab ci 中的阶段与 laravel 联系起来?
- mongodb - 与mongodb连接的flutter问题
- reactjs - 如何使用类型文件
- reactjs - 如何使用 useEffect 控制重新运行