【问题标题】:Order Dataframe Index based on a second Dataframe根据第二个数据框订购数据框索引
【发布时间】:2018-11-06 06:46:54
【问题描述】:

我在 Python 中有两个 DataFrame,但用作索引的列 (CodeNumber) 的顺序不同。需要对它们进行同样的排序;遵循代码:

#generating DataFrames:
d3 = {'CodeNumber': [1234, 1235, 111, 101], 'Date': [20150808, 20141201, 20180119, 20120720], 'Weight': [26, 32, 41, 24]}
d4 = {'CodeNumber': [1235, 1234, 101, 111], 'Date': [20160808, 20151201, 20180219, 20130720], 'Weight': [28, 25, 47, 3]}

data_SKU3 = pd.DataFrame(data=d3)
data_SKU4 = pd.DataFrame(data=d4)

然后我将 CodeNumber 设置为索引:

dados_SKU3.set_index('CodeNumber', inplace = True)
dados_SKU4.set_index('CodeNumber', inplace = True)

如果我们打印生成的 DataFrame,请注意 data_SKU3 的代码编号顺序如下:1234 1235 111 101,而 data_SKU4:1235 1234 101 111

有没有办法对代码编号进行排序,以便两个 DataFrame 的顺序相同?

【问题讨论】:

    标签: python pandas dataframe kaggle


    【解决方案1】:

    如果indices 中的值相同,则使用sort_index

    data_SKU3 = data_SKU3.set_index('CodeNumber').sort_index()
    data_SKU4 = data_SKU4.set_index('CodeNumber').sort_index()
    
    print (data_SKU3)
                    Date  Weight
    CodeNumber                  
    101         20120720      24
    111         20180119      41
    1234        20150808      26
    1235        20141201      32
    
    print (data_SKU4)
                    Date  Weight
    CodeNumber                  
    101         20180219      47
    111         20130720       3
    1234        20151201      25
    1235        20160808      28
    

    另一种方法是使用 reindex 和另一个 index 值,但必须是唯一值,唯一的区别是不同的顺序:

    data_SKU3 = data_SKU3.set_index('CodeNumber')
    data_SKU4 = data_SKU4.set_index('CodeNumber').reindex(index=data_SKU3.index)
    print (data_SKU3)
                    Date  Weight
    CodeNumber                  
    1234        20150808      26
    1235        20141201      32
    111         20180119      41
    101         20120720      24
    
    print (data_SKU4)
                    Date  Weight
    CodeNumber                  
    1234        20151201      25
    1235        20160808      28
    111         20130720       3
    101         20180219      47
    

    【讨论】:

      【解决方案2】:

      您还可以在将值设置为index 之前调用.sort_values(by = 'CodeNumber'),对每个数据帧按CodeNumber 对值进行排序:

      d3 = {'CodeNumber': [1234, 1235, 111, 101], 'Date': [20150808, 20141201, 20180119, 20120720], 'Weight': [26, 32, 41, 24]}
      d4 = {'CodeNumber': [1235, 1234, 101, 111], 'Date': [20160808, 20151201, 20180219, 20130720], 'Weight': [28, 25, 47, 3]}
      
      data_SKU3 = pd.DataFrame(data=d3).sort_values(by = 'CodeNumber')
      data_SKU4 = pd.DataFrame(data=d4).sort_values(by = 'CodeNumber')
      
      data_SKU3.set_index('CodeNumber', inplace = True)
      data_SKU4.set_index('CodeNumber', inplace = True)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-28
        • 2019-12-19
        • 1970-01-01
        • 1970-01-01
        • 2014-02-14
        • 2017-12-26
        • 2020-10-08
        • 1970-01-01
        相关资源
        最近更新 更多