【问题标题】:Pandas reindex subset of rowsPandas 重新索引行的子集
【发布时间】:2022-01-23 10:21:48
【问题描述】:

我有以下数据框:

import pandas as pd
#Create DF
d = { 
     'Country': ['USA','USA','AUS','AUS','AUS','UK','UK'],
    'poulation_k':[200,250,150,120,350,800,600,],
    }
           
df = pd.DataFrame(data=d)
df

我想按Country = AUS 所在的人口对行进行排序,但要保持它们在整个数据框中的顺序:

所以我的预期输出是:

我也希望由其他国家/地区执行此操作,但我希望手动执行 - 即我希望函数指定 Country 名称。任何帮助都会很棒!谢谢

更新:

编辑,我忽略了我的数据框也包含其他列。所以例子应该是:

import pandas as pd
#Create DF
d = { 
     'Country': ['USA','USA','AUS','AUS','AUS','UK','UK'],
    'poulation_k':[200,250,150,120,350,800,600,],
    }
           
df = pd.DataFrame(data=d)
df['Test'] = df.poulation_k.astype(str) + df.Country
df

AUS进行排序的函数的预期输出为:

【问题讨论】:

    标签: python pandas


    【解决方案1】:
    def func(country):
        sub_df = df[df['Country']==country] 
    
        idx_i = sub_df.index
        idx_f = sub_df.sort_values('poulation_k', ascending=False).index
    
        return df.rename(dict(zip(idx_f, idx_i))).sort_index()
        
    func('AUS')
    

    我的解决方案修改了索引,因此无论您的数据框中有多少列,它都能正常工作。

    【讨论】:

    • 感谢 Raymond,有没有办法可以将其放入函数中,类似于 Mayank 的答案?
    • 为您完成了。改变它并不难,对吧:)?
    • 只是看着,不,它看起来并不难!这就是我今天学到的东西哈哈!非常感谢
    • 很高兴听到:)。
    • 祝你有美好的一天!
    【解决方案2】:

    由于您只重新排序一列,您可以简单地做到这一点:

    df.loc[df['Country'] == 'AUS', 'poulation_k'] = np.sort(
        df.loc[df['Country'] == 'AUS', 'poulation_k'].values)
    

    它按预期给出:

      Country  poulation_k
    0     USA          200
    1     USA          250
    2     AUS          120
    3     AUS          150
    4     AUS          350
    5      UK          800
    6      UK          600
    

    【讨论】:

      猜你喜欢
      • 2020-07-22
      • 2020-04-12
      • 1970-01-01
      • 2022-07-19
      • 2017-11-29
      • 2020-09-05
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多