多列上的熊猫 groupby

Posted

技术标签:

【中文标题】多列上的熊猫 groupby【英文标题】:pandas groupby on multiple columns 【发布时间】:2018-05-15 00:41:59 【问题描述】:

我有一个包含状态代码及其状态的数据集。

  code  status
1   AZ  a
2   CA  b
3   KS  c
4   MO  c
5   NY  d
6   AZ  d
7   MO  a
8   MO  b
9   MN  b
10  NV  a
11  NV  e
12  MO  f
13  NY  a
14  NY  a
15  NY  b

我想过滤掉这个代码只包含a状态的数据集,并计算它们有多少。示例输出将是,

  code  status  
1   AZ  a   
2   MO  a   
3   NY  a   

    AZ =1   MO = 1  NY =2

我使用了df.groupyby("code").loc[df.status == 'a'],但没有任何运气。 任何帮助表示赞赏!

【问题讨论】:

您也可以按多列进行分组,即使它没有明确说明您使用 df.groupby(['code','status']).count() 要求的内容 【参考方案1】:

让我们先过滤数据框为 a,然后是 groupby 和 count。

df[df.status == 'a'].groupby('code').size()

输出:

code
AZ    1
MO    1
NV    1
NY    2
dtype: int64

【讨论】:

我也想有多个值,所以我尝试了df[df.status == 'a' or df.status == 'b'].groupby('code').size(),但我有 keyerror。你知道我为什么会收到 keyerror 吗? df[df['status'].isin(['a','b'])].groupby('code').size() 或者如你所愿:df[(df['status'] == 'a') | (df['status'] == 'b')].groupby('code').size()【参考方案2】:

我已经重新创建了你的数据集

data = [["AZ","CA", "KS","MO","NY","AZ","MO","MO","MN","NV","NV","MO","NY","NY" ,"NY"],
       ["a","b","c","c","d","d","a","b","b","a","e","f","a","a","b"]]


df = pd.DataFrame(data)
df = df.T
df.columns = ["code","status" ]

df[df["status"] == "a"].groupby(["code", "status"]).size()

给予

code  status
AZ    a         1
MO    a         1
NV    a         1
NY    a         2
dtype: int64

【讨论】:

以上是关于多列上的熊猫 groupby的主要内容,如果未能解决你的问题,请参考以下文章

大熊猫上的sklearn train_test_split 按多列分层

熊猫适用于滚动多列输出

熊猫按多列排名

在熊猫数据框中将多列拆分为行

将熊猫多索引数据框重塑为多列

在多列熊猫上应用 lambda 行