python - 计算二进制数并在 Pandas DataFrame 中查找交集

标签 python pandas intersection dataframe

我有两个基于以下 Pandas DataFrame 的问题。

(1.) 每个二进制值表示数据项 (p1,p2,p3,p4) 的出现或不存在。我想计算 DataFrame 中的二进制值(仅 1 秒)。

df = pd.DataFrame([[1,1,1,0,1],[2,1,1,0,1],[3,1,1,1,1],[4,0,1,0,1]])
df.columns = ['session','p1','p2','p3','p4']

输出

   session  p1  p2  p3  p4
0        1   1   1   0   1
1        2   1   1   0   1
2        3   1   1   1   1
3        4   0   1   0   1

以下是我尝试过的。

print ([df[col].value_counts() for col in df.columns])

但是我的预期输出如下。任何帮助得到这个结果。

        count
0        3
1        3
2        4
3        2

(2.) 我想获得 session 的交集。获取 session 1和2、1和3、1和4、2和3、2和4、3和4之间的公共(public)数据项(p1,p2,p3,p4)。 我不知道预期的输出,但我觉得它应该像下面这样。

  1,2,3,4
1,3,3,3,2
2,3,3,3,2
3,3,3,4,2
4,2,2,2,2

最佳答案

(1)

我假设您想将session设置为索引

In [86]: df = df.set_index('session')

In [87]: df.sum(axis=1)
Out[87]: 
session
1          3
2          3
3          4
4          2
dtype: int64

(2)

使用dot

In [90]: df.dot(df.T)
Out[90]: 
session  1  2  3  4
session            
1        3  3  3  2
2        3  3  3  2
3        3  3  4  2
4        2  2  2  2

关于python - 计算二进制数并在 Pandas DataFrame 中查找交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21252983/

相关文章:

python - 最Pythonic的方式来中止缓存装饰器?

python - 比较数据框中特定列的差异

python - 如何计算由端点和弧上点给出的两条弧的交点?

r - 在 R 中与轮廓和多边形相交

寻找区域内反射光束交点的算法

python - 一维 NumPy 数组中最后一个值的地址

python - Google 的 Python 练习默认编程出错 'Copyspecial'

python - unicode_literals 是做什么用的?

python - 什么是 R 的 qnorm() 的 Pandas 等价物

Python Pandas DataFrame to_csv 奇怪的格式