分组数据帧然后在pandas中过滤的最有效方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分组数据帧然后在pandas中过滤的最有效方法相关的知识,希望对你有一定的参考价值。

下午全部,

我有一个非常大的数据集,我已将其分组。这是一个示例:

df_ccy = df.groupby(['currency_str','state' 
 ['state'].count().reset_index(name='count').sort_values(['count'], ascending=False)

display(df_ccy)

输出:

currency_str    state           count
USD             Traded Away     148
AUD             Dealer Timeout  52
CAD             Done            44
USD             Covered         38
USD             Dealer Timeout  29
ZAR             Done            22

我只想表明:

CAD             Done            44
ZAR             Done            22

我通过以下方式实现了

display(df_ccy [df_ccy ['state']=='Done'][['currency_str','state','count']])

我应该如上所述在原始groupby语句或过滤器上使用Lambda函数吗?什么是最佳做法?

答案
df = pd.DataFrame({'currency_str': ['USD', 'AUD', 'CAD', 'CAD', 'ZAR', 
                                    'ZAR', 'USD', 'USD', 'ZAR'], 
                   'state': ['Traded Away', 'Dealer Timeout', 'Done', 'Done', 'Done',
                             'Done', 'Covered', 'Dealer Timeout', 'Done']})

print (df)
  currency_str           state
0          USD     Traded Away
1          AUD  Dealer Timeout
2          CAD            Done
3          CAD            Done
4          ZAR            Done
5          ZAR            Done
6          USD         Covered
7          USD  Dealer Timeout
8          ZAR            Done

我认为你需要先过滤:

df1 = df[df['state']=='Done']
#alternative
#df1 = df.query("state == 'Done'")

然后数:

df_ccy = (df1.groupby(['currency_str','state'])['state']
            .count()
            .reset_index(name='count')
            .sort_values(['count'], ascending=False))

print (df_ccy)
  currency_str state  count
1          ZAR  Done      3
0          CAD  Done      2

或者,如果不是具有相同过滤值的重要列状态:

df_ccy = (df1['currency_str'].value_counts()
                            .reset_index(name='count')
                            .rename(columns={'index':'currency_str'}))
print (df_ccy)
  currency_str  count
0          ZAR      3
1          CAD      2

以上是关于分组数据帧然后在pandas中过滤的最有效方法的主要内容,如果未能解决你的问题,请参考以下文章

有效地附加到 pandas 数据帧

在 Pandas 中组合以下数据框的最简单方法

在 Panda DataFrame 中过滤 groupby 数据的有效方法

如何有效地迭代 Pandas 数据帧的连续块

按最新日期过滤 BigQuery 行的最有效方法

根据 pandas 中的字典对数据帧的行进行分组并对相应的分子求和