我有以下 pandas 数据框(忽略索引):
数据帧的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/