假设我有这些数据:
>>> data = {'event': [0,1,1,2,1,0],
... 'val1': [1, 2, 3, 4, 5, 6]
... }
>>> df1 = pd.DataFrame(data, index = ['hash1', 'hash1', 'hash2',
'hash3', 'hash3', 'hash3'])
>>> df1
event val1
hash1 0 1
hash1 1 2
hash2 1 3
hash3 2 4
hash3 1 5
hash3 0 6
我想做什么: 我想减少df,只显示有关哈希值的数据,这些哈希值至少有一次出现所有唯一的事件值。
所以最后我会得到一个如下所示的数据框:
event val1
hash3 2 4
hash3 1 5
hash3 0 6
我试图将数据帧拆分为等于零而不是大于零的事件,然后尝试从"等于零"查找索引。 "中的数据帧不等于零"数据框 - 但我对熊猫的表现非常糟糕。如果有人能帮助我实现这一目标,我将非常感激。 先谢谢你们!
答案 0 :(得分:1)
您可以在索引上的groupby
之前过滤df,然后使用nunique
获取唯一事件的数量,并过滤具有多个唯一条目的哈希的orig df:< / p>
In [62]:
gp = df1[df1['event'] !=0].groupby(level=0)['event'].nunique()
df1.loc[gp[gp> 1].index]
Out[62]:
event val1
hash3 2 4
hash3 1 5
hash3 0 6
打破上述情况:
In [63]:
df1['event'] !=0
Out[63]:
hash1 False
hash1 True
hash2 True
hash3 True
hash3 True
hash3 False
Name: event, dtype: bool
In [64]:
df1[df1['event'] !=0]
Out[64]:
event val1
hash1 1 2
hash2 1 3
hash3 2 4
hash3 1 5
In [65]:
df1[df1['event'] !=0].groupby(level=0)['event'].nunique()
Out[65]:
hash1 1
hash2 1
hash3 2
Name: event, dtype: int64
In [66]:
gp[gp> 1]
Out[66]:
hash3 2
Name: event, dtype: int64
修改强>
根据您的更新,您可以将nunique
值的长度与事件unique
值的长度进行比较:
In [107]:
df1.loc[df1.groupby(level=0)['event'].nunique() == len(df1['event'].unique())]
Out[107]:
event val1
hash3 2 4
hash3 1 5
hash3 0 6