【问题标题】:Python Pandas : How to use transform with the DataFrame index?Python Pandas:如何使用带有 DataFrame 索引的转换?
【发布时间】:2020-11-18 15:50:59
【问题描述】:
df = pd.DataFrame([['A',7], ['A',5], ['B',6]], columns = ['group', 'value'])

如果我想通过group 保留一行,即具有最小值value 的那一行,我使用:

df[df['value'] == df.groupby('group')['value'].transform('min')]

但是,如果我想保留索引最低的行,以下方法不起作用:

df[df.index == df.groupby('group').index.transform('min')]

我知道我可以使用 reset_index() 并将索引作为一列处理,但我可以避免这种情况吗:

df[df.reset_index()['index'] == df.reset_index().groupby('group')['index'].transform('min')]

【问题讨论】:

  • 你的目标是什么,你能发布预期的输出吗?

标签: python pandas transform


【解决方案1】:

您可以按索引排序(如果尚未排序),然后取每个组中的第一行:

df.sort_index().groupby('group').first()

【讨论】:

    【解决方案2】:

    你可以这样做:

    import pandas as pd
    
    df = pd.DataFrame([['A', 7], ['A', 5], ['B', 6]], columns=['group', 'value'])
    
    idxs = df.reset_index().groupby('group').index.idxmin()
    result = df.loc[idxs]
    
    print(result)
    

    输出

      group  value
    0     A      7
    2     B      6
    

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 2023-02-02
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      相关资源
      最近更新 更多