分组数据帧然后在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中过滤的最有效方法的主要内容,如果未能解决你的问题,请参考以下文章