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

时间:2014-01-21 08:38:26

标签: python pandas intersection dataframe

我有两个基于以下熊猫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。)我想得到会话的交叉点。它是在会话1和2,1和3,1和4,2和3,2和4,3和4之间获得公共数据项(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 个答案:

答案 0 :(得分:3)

(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