我有一个像下面的熊猫dv
tno,tdate,buyprice,sellprice,qty,t1,t2
1,2017,10,20,5,teamA,teamB
2,2017,5,10,5,teamB,teamA
预期的操作:
tno,tdate,buyprice,sellprice,qty,t1,t2
1,2017,10,20,5,teamA,NaN
1,2017,10,20,5,NaN,teamB
2,2017,5,10,5,teamB,NaN
2,2017,5,10,5,NaN,TeamA
发生的事情是我将2个不同团队之间的内部交易分成2个不同的交易。
我尝试使用df.unstack()
并阅读this answer我错过了告诉大熊猫我想要取消它的方式的方法。
UPDATE1:
问题的更大背景是:
tno,tdate,buyprice,sellprice,qty,Buyerteam,Sellerteam
1,2017,10,20,5,teamA,teamB
2,2017,5,10,5,teamB,teamA
有两种类型的交易
qty*(buyprice or sell price)
来计算团队的开支。如果buyTeam是NaN,我会qty*sellprice
,if sellTeam=NaN I do qty*buyprice
。qty*(buyprice or sellprice)
的条件无法应用我希望我引入NaN的意图很明确。
答案 0 :(得分:0)
如果可能,团队的一个输出列使用lreshape
:
df = pd.lreshape(df, {'t':['t1','t2']})
print (df)
buyprice sellprice tdate tno t
0 10 20 2017 1 teamA
1 5 10 2017 2 teamB
2 10 20 2017 1 teamB
3 5 10 2017 2 teamA
编辑:如果只有2个团队可以使用concat
drop
,则使用reindex_axis
和sort_values
使用最后一列:
df = pd.concat([df.drop('t2', axis=1), df.drop('t1', axis=1)], ignore_index=True)
.reindex_axis(df.columns, 1)
.sort_values(['tno','tdate'])
print (df)
tno tdate buyprice sellprice t1 t2
0 1 2017 10 20 teamA NaN
2 1 2017 10 20 NaN teamB
1 2 2017 5 10 teamB NaN
3 2 2017 5 10 NaN teamA