【问题标题】:Change the order of the columns based on a specific pattern根据特定模式更改列的顺序
【发布时间】:2020-08-07 03:06:15
【问题描述】:

我有一个类似于下面结构的数据框:

我只想重新洗牌以获得以下顺序(无需计算):

这两个序列的顺序应该是 Amount、Buy、Sell。我知道Amount 字段始终是数字,Buy 字段仅包含Buy,而Sell 字段仅包含Sell。表格中可能还有更多的 Amount03、Buy03 和 Sell03,您无需进行任何更改(例如,正确的订单)! 为了重现这个问题,我附上了下面的示例数据框:

main = {'ID': [1,2,3],
        'Name1': ['Julius', 'Peter', 'Marcus'],
'Postcode': [58921, 69751, 60314],
'Buy01': ['Buy', 'Buy', ''],
'Sell01': ['', '', 'Sell'],
'Amount01': [1500, 1200, 3000],
'ELO': [15, 18, 15],
'Buy02': ['Buy', ' ', ''],
'Sell02': ['', 'Sell', 'Sell'],
'Amount02': [1600, 1100, 3620],
'Height': [178, 165, 174],
'Weight': [96, 85, 73],
        }
df = pd.DataFrame(main, columns = ['ID', 'Name1', 'Postcode', 'Buy01', 'Sell01', 'Amount01', 'ELO',  'Buy02', 'Sell02', 'Amount02', 'Height', 'Weight'])

我正在寻找通用解决方案。任何帮助/建议将不胜感激!

【问题讨论】:

  • 我想知道这样做的目的是什么。列的排列并不是什么大问题。它更多的是在演示方面。在执行操作时,您应该始终按名称引用列,而不是数据框中的位置。例如,与普通的 numpy 矩阵相比,这是 pandas 的一大优势。因此,请考虑重新排列列可能不是您尝试做的最佳方法。

标签: python pandas numpy columnsorting


【解决方案1】:

这不是您问题的完整解决方案,但可能有助于激发一些想法。

在 pandas 中,您可以使用以下符号获取数据框的列:

df[['col1', 'col2']]

基于这个想法,您也可以更改列的显示顺序。例如在你的情况下:

>>> df[['Amount01', 'Sell01', 'Buy01']]
   Amount01 Sell01 Buy01
0      1500          Buy
1      1200          Buy
2      3000   Sell   

您可能会执行以下操作来重新排序列:

>>> columns = list(df.columns)
>>> df[sorted(columns)]
   Amount01  Amount02 Buy01 Buy02  ELO  Height  ID   Name1  Postcode Sell01 Sell02  Weight
0      1500      1600   Buy   Buy   15     178   1  Julius     58921                    96
1      1200      1100   Buy         18     165   2   Peter     69751          Sell      85
2      3000      3620               15     174   3  Marcus     60314   Sell   Sell      73

更多的临时“排序”可以使用自定义算法进行排序。在那里,您可以添加您描述的逻辑来对列数组进行排序,然后对列进行排序。

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 2020-07-03
    • 1970-01-01
    • 2014-06-25
    相关资源
    最近更新 更多