gpt4 book ai didi

python - 按 GroupBy 内容过滤 Pandas DataFrame

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:17 25 4
gpt4 key购买 nike

考虑以下 DataFrame:

    records = [{'item': 'Widget A', 'quantity': 50, 'revenue': 25.0, 'trandate': '2016-3-24'},
{'item': 'Widget B', 'quantity': 6, 'revenue': 72.0, 'trandate': '2016-3-28'},
{'item': 'Widget C', 'quantity': 5, 'revenue': 75.0, 'trandate': '2016-3-28'},
{'item': 'Widget A', 'quantity': 168, 'revenue': 84.0, 'trandate': '2016-3-29'},
{'item': 'Widget B', 'quantity': 6, 'revenue': 84.0, 'trandate': '2016-3-29'}]
indices = [487, 488, 493, 495, 497]
df = pd.DataFrame(records, index=indices)

屈服

    id  item       quantity  revenue   trandate
487 Widget A 50 25.0 2016-3-24
488 Widget B 6 72.0 2016-3-28
493 Widget C 6 75.0 2016-3-28
495 Widget A 6 84.0 2016-3-29
497 Widget B 6 84.0 2016-3-29

我需要将这个 DataFrame 分成两个互补的集合:

  1. 包含每个 item 的第一笔交易的 DataFrame:

    id  item       quantity  revenue   trandate
    487 Widget A 50 25.0 2016-3-24
    488 Widget B 6 72.0 2016-3-28
    493 Widget C 6 75.0 2016-3-28
  2. 为每个 item 排除第一笔交易的 DataFrame:

     id  item       quantity  revenue   trandate
    495 Widget A 6 84.0 2016-3-29
    497 Widget B 6 84.0 2016-3-29

我想通过 GroupedBy 对象过滤 df,但是在我分组之后我无法让 df 的索引显示出来:

    gb = df.groupby('item')
>>> gb.groups
# {'Widget A': [487, 495], 'Widget B': [488, 497], 'Widget C': [493]}
>>> gb['trandate'].min()
item
Widget A 2016-3-24
Widget B 2016-3-28
Widget C 2016-3-28

我可以使用 GroupBy 来生成像这样的 DataFrame 吗:

    id   item
487 Widget A 2016-3-24
488 Widget B 2016-3-28
493 Widget C 2016-3-28

最佳答案

我认为您需要通过 cumcount 创建的 mask 进行过滤:

print (df.groupby('item').cumcount())
487 0
488 0
493 0
495 1
497 1
dtype: int64

print (df[df.groupby('item').cumcount() == 0])
item quantity revenue trandate
487 Widget A 50 25.0 2016-3-24
488 Widget B 6 72.0 2016-3-28
493 Widget C 5 75.0 2016-3-28

print (df[df.groupby('item').cumcount() > 0])
item quantity revenue trandate
495 Widget A 168 84.0 2016-3-29
497 Widget B 6 84.0 2016-3-29

关于python - 按 GroupBy 内容过滤 Pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38314981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com