为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米脂 2023-07-05 16:14:28
我有一个如下所示的数据框:data:    items   status0   jet     fail1   car     fail2   car     pass3   bike    fail4   car     fail5   jet     fail6   bike    pass7   jet     fail8   jet     fail9   bike    pass我想对数据进行分组items并使用每个值的计数创建一个新的数据框。预期输出:df:  unique  count  pass  fail0    jet      4     0     41    car      3     1     22   bike      3     2     1现在一种方法是获取唯一列表items并在其上循环以查找count,pass然后fail将这些列表组合到数据帧中但是我怎样才能有效地做到这一点呢?
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

使用crosstabwith作为新索引名称,然后为byDataFrame.rename_axis添加新列,最后将索引转换为column by :0 positionDataFrame.insertDataFrame.reset_index

df = 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  pass

0   bike      3     1     2

1    car      3     2     1

2    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  count

0   bike     1     2      3

1    car     2     1      3

2    jet     4     0      4


查看完整回答
反对 回复 2023-07-05
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

您可以单独获取值并与以下组合pd.concat:


A = df.groupby("items").size().rename("count")

A

items

bike    3

car     3

jet     4

Name: count, dtype: int64


B = (

    df.groupby(["items", "status"])

    .size()

    .unstack(fill_value=0)

    .rename_axis(columns=None)

)

B

      fail  pass

items       

bike    1   2

car     2   1

jet     4   0



pd.concat((A, B), axis=1).reset_index()


   items    count   fail    pass

0   bike    3        1      2

1   car     3        2      1

2   jet     4        4      0


查看完整回答
反对 回复 2023-07-05
  • 2 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信