python - pandas 分组然后选择某些列

标签 python pandas dataframe group-by

我有一个输入数据框

df_orders = pd.DataFrame({'item_id': [1, 1, 2, 2, 3, 4, 4, 5, 7, 8],
                        're_order':[0, 1, 0, 1, 1, 0, 1, 1, 1, 0],
                        'count':[27, 49, 3, 1, 6, 8, 14, 1, 1, 6] }, 
                         columns=['item_id', 're_order', 'count'])
or

   item_id  re_order  count
0        1         0     27
1        1         1     49
2        2         0      3
3        2         1      1
4        3         1      6
5        4         0      8
6        4         1     14
7        5         1      1
8        7         1      1
9        8         0      6
10       8         1      7

我应该如何使用 item_id 将其分组,然后仅选择 re_order = 1 的数据作为一列,然后再选择另一列包含总计数?

我想要的输出

   item_id  reor_count  tot_count
0        1          49         76
1        2           1          4
2        3           6          6
3        4          14         22
4        5           1          1
5        7           1          1
6        8           7         13

我可以使用

找到总计数 (tot_count)
df_orders_tot_count = df_orders.groupby('item_id')['count'].agg(['sum']).rename(columns={'sum': 'tot_count'}).reset_index()

      item_id  tot_count
0           1         76
1           2          4
2           3          6
3           4         22
4           5          1
5           7          1
6           8         13

但很难使用 Pythonic 方式生成 reor_count 列。任何帮助将不胜感激!

最佳答案

您可以通过将 re_ordercount 相乘来预先计算 re_order 列,然后执行 groupby.sum:

(df_orders.assign(re_order = df_orders['re_order'] * df_orders['count'])
 .groupby('item_id', as_index=False).sum())

# item_id   re_order    count
#0      1       49       76
#1      2       1         4
#2      3       6         6
#3      4       14       22
#4      5       1         1
#5      7       1         1
#6      8       0         6

如果您更喜欢重命名的列名称:

(df_orders.assign(re_order = df_orders['re_order'] * df_orders['count'])
 .groupby('item_id', as_index=False).sum()
 .rename(columns={'re_order': 'reor_count', 'count': 'tot_count'}))

关于python - pandas 分组然后选择某些列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46126362/

相关文章:

python - 如何使用 for 循环动态创建数据帧

python - 如何将字典列表拆分为多个保持相同索引的列?

python - 过滤数据框中具有相同值的列 - Python

python - 同一列的多个副本到新数据框中

r - 获取数据框中的最少行

python - 为折线图绘制趋势线

python argparse store --foo=bar as args.key ='foo' , args.value ='bar'

python - PyTesseract 无法识别图像

python - 使用 wsgi 和 virtualenv 时 django 错误 : could not import settings

python - 获取每行中具有最大值的列的索引,无需 (...,) pandas python