pandas:将数据帧减少到仅特定的发生链

2024-05-15 16:49:20 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下数据:

>>> 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,以便只显示有关这些哈希的数据,这些哈希至少有一个事件的all唯一值。你知道吗

所以最后我会得到这样一个数据帧:

       event   val1
hash3      2      4
hash3      1      5
hash3      0      6

我试着将数据帧拆分为等于零或大于零的事件,然后在“不等于零”的数据帧中从“等于零”的数据帧中查找索引-但我对pandas真的很不好。如果有人能帮我做到这一点,我将非常感激。 提前谢谢各位!你知道吗


Tags: 数据eventdataframedfdataindex事件all
1条回答
网友
1楼 · 发布于 2024-05-15 16:49:20

您可以在索引上的groupby之前过滤df,然后使用nunique获取唯一事件的数量,并在具有多个唯一项的哈希上过滤原始df:

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

相关问题 更多 >