python - 重新排列 python pandas 数据框(部分转置)

标签 python pandas dataframe

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

<表类=“s-表”> <标题> 帐户 货币 侧面 引用1 经纪人1 引用2 经纪人2 引用3 经纪人3 <正文> Acc1 欧元/美元 购买 1.218 布鲁克3 1.216 布鲁克6 NaN NaN ACC2 英镑/美元 卖出 1.345 布鲁克6 1.330 布鲁克5 1.341 布鲁克3

数据帧的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"]
}

我想重新排列上面的数据框以获得以下数据框:

| 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

最佳答案

您可以使用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

关于python - 重新排列 python pandas 数据框(部分转置),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65411077/

相关文章:

python - pyspark 试图检索具有相同 id 的行

python - 将 bupaR 的动画流程图集成到 Python 中的 Bokeh 仪表板中;有办法吗?

python - 如何在 Python 的 turtle 图形中创建旋转文本?

python - 如何在 Python3 中检查 repl/ipython 中的生成器

python - 根据 pandas dataframe 的连接数自动向 networkx 中的边添加权重

python - 为数据透视表中不同列的行创建小计

python - if 的 Lambdas 语法错误

r - 如何在数据框中返回 "TRUE"/"FALSE"匹配项?

python - 通过分箱列访问 pandas 中的行

r - 将列表 append 到 R 中的数据框