【问题标题】:Rearrange python pandas dataframe (partially transposing)重新排列 python pandas 数据框(部分转置)
【发布时间】:2020-12-22 23:23:26
【问题描述】:

我有以下 pandas 数据框(索引被忽略):

Account Currency Side Quote1 Broker1 Quote2 Broker2 Quote3 Broker3
Acc1 EUR/USD BUY 1.218 Brk3 1.216 Brk6 NaN NaN
Acc2 GBP/USD SELL 1.345 Brk6 1.330 Brk5 1.341 Brk3

数据框的python表示:

data = {
"Account":["Acc1","Acc2"],"Currency":["EUR/USD","GBP/USD"],"Side":["BUY","SELL"],
"Quote1":[1.218,1.345],"Broker1":["Brk3","Brk6"],
"Quote2":[1.216,1.330],"Broker2":["Brk6","Brk5"],
"Quote3":[np.nan,1.341],"Broker3":[np.nan,"Brk3"]
}

我想重新排列上面的dataframe,得到下面的dataframe:

| Account | Currency | Side | Quote | Broker | 
|---------|----------|------|-------|--------|
|Acc1     |EUR/USD   |BUY   |1.218  |Brk3    |
|Acc1     |EUR/USD   |BUY   |1.216  |Brk6    |
|Acc2     |GBP/USD   |SELL  |1.345  |Brk6    |
|Acc2     |GBP/USD   |SELL  |1.330  |Brk5    |
|Acc2     |GBP/USD   |SELL  |1.341  |Brk3    |

需要注意的是,要转置的列(Quote1、Broker1、Quote2、Broker2、Quote3、Broker3)只有在它们不包含 NaN 时才应该转置。

我对 pandas 很陌生,所以我尝试了使用我在这里找到的其他线程的多索引和枢轴,但我一直在空单元格(如数据框 1 中第 1 行的 Quote3 和 Broker3)的位置失败被忽略。如果你们能提供帮助,那就太好了!

干杯

彼得卢斯蒂格20

【问题讨论】:

  • 欢迎来到 Stackoverflow。很好的第一个问题和如何提出格式良好的 pandas 问题的好例子。

标签: python pandas dataframe


【解决方案1】:

你可以使用wide_to_long:

pd.wide_to_long(df, ['Quote', 'Broker'],
                ['Account', 'Currency', 'Side'], 'j', suffix=r'\d+')\
  .dropna(how='all').droplevel(-1).reset_index()

结果:

  Account Currency  Side  Quote Broker
0    Acc1  EUR/USD   BUY  1.218   Brk3
1    Acc1  EUR/USD   BUY  1.216   Brk6
2    Acc2  GBP/USD  SELL  1.345   Brk6
3    Acc2  GBP/USD  SELL  1.330   Brk5
4    Acc2  GBP/USD  SELL  1.341   Brk3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-12
    • 2017-02-13
    • 1970-01-01
    • 2021-09-12
    • 2017-08-12
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多