我有大熊猫交叉表,我想过滤一次出现的项目,以便更容易解释,我会制作人工数据,这里是我的数据
Customer_id Apple Book Candy
1 0 1 1
2 1 1 0
3 1 1 0
4 1 0 0
因为Candy
刚出现一次,所以结果就像
Customer_id Apple Book
1 0 1
2 1 1
3 1 1
4 1 0
答案 0 :(得分:3)
将boolean indexing
与布尔掩码一起使用:
如果希望过滤掉每列只有一个1
而不首先:
df = df.set_index('Customer_id')
df = df.loc[:, df.eq(1).sum().ne(1)]
print (df)
Apple Book
Customer_id
1 0 1
2 1 1
3 1 1
4 1 0
<强>详情:
按1
比较:
print (df.eq(1))
Apple Book Candy
Customer_id
1 False True True
2 True True False
3 True True False
4 True False False
按True
:
sum
秒数
print (df.eq(1).sum())
Apple 3
Book 3
Candy 1
由1
比较不等于:
print (df.eq(1).sum().ne(1))
Apple True
Book True
Candy False
dtype: bool
如果希望每列只过滤一个0
而不首先:
df = df.set_index('Customer_id')
df = df.loc[:, df.eq(0).sum().eq(1)]
print (df)
Apple Book
Customer_id
1 0 1
2 1 1
3 1 1
4 1 0
<强>详情:
按0
比较:
print (df.eq(0))
Apple Book Candy
Customer_id
1 True False False
2 False False True
3 False False True
4 False True True
按True
:
sum
秒数
print (df.eq(0).sum())
Apple 1
Book 1
Candy 3
dtype: int64
按1
比较:
print (df.eq(0).sum().eq(1))
Apple True
Book True
Candy False
dtype: bool
答案 1 :(得分:3)
使用dropna
df.replace(0,np.nan).dropna(axis=1,thresh=2).fillna(0).astype(int)
Out[18]:
Customer_id Apple Book
0 1 0 1
1 2 1 1
2 3 1 1
3 4 1 0