对数据框中的列进行分组,并使用分组数据创建另一个数据框

我有一个如下所示的数据框:


data:


    items   status

0   jet     fail

1   car     fail

2   car     pass

3   bike    fail

4   car     fail

5   jet     fail

6   bike    pass

7   jet     fail

8   jet     fail

9   bike    pass

我想对数据进行分组items并使用每个值的计数创建一个新的数据框。预期输出:


df:

  unique  count  pass  fail

0    jet      4     0     4

1    car      3     1     2

2   bike      3     2     1

现在一种方法是获取唯一列表items并在其上循环以查找count,pass然后fail将这些列表组合到数据帧中但是我怎样才能有效地做到这一点呢?


米脂
浏览 139回答 2
2回答

MM们

使用crosstabwith作为新索引名称,然后为byDataFrame.rename_axis添加新列,最后将索引转换为column by :0 positionDataFrame.insertDataFrame.reset_indexdf = pd.crosstab(df['items'], df['status']).rename_axis(columns=None, index='unique')df.insert(0, 'count', df.sum(axis=1))df = df.reset_index()print (df)  unique  count  fail  pass0   bike      3     1     21    car      3     2     12    jet      4     4     0如果count应该是最后一列,则可以使用margin参数并删除最后一行:df = (pd.crosstab(df['items'], df['status'],                   margins=True,                   margins_name='count')       .rename_axis(columns=None, index='unique')       .iloc[:-1]       .reset_index())print (df)  unique  fail  pass  count0   bike     1     2      31    car     2     1      32    jet     4     0      4

收到一只叮咚

您可以单独获取值并与以下组合pd.concat:A = df.groupby("items").size().rename("count")Aitemsbike    3car     3jet     4Name: count, dtype: int64B = (    df.groupby(["items", "status"])    .size()    .unstack(fill_value=0)    .rename_axis(columns=None))B      fail  passitems       bike    1   2car     2   1jet     4   0pd.concat((A, B), axis=1).reset_index()   items    count   fail    pass0   bike    3        1      21   car     3        2      12   jet     4        4      0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python