[英]Reshaping a column based on another column in a pandas dataframe
Date Sin Ret
01/01/1990 True 0.03
01/02/1990 True 0.02
01/01/1990 False 0.01
01/02/1990 False 0.05
我想要
Date Ret1 Ret2
01/01/1990 0.03 0.01
01/02/1990 0.02 0.05
這樣我就可以
Date Ret1-Ret2
01/01/1990 0.02
01/02/1990 -0.03
做這個的最好方式是什么? 我當時正在考慮將日期和罪過設置為索引,然后將罪惡疊加。 有更容易的方法嗎?
這是df.set_index
和df.unstack
的解決方案:
In [516]: df.set_index(['Date', 'Sin']).unstack(0).diff().iloc[-1]
Out[516]:
Date
Ret 01/01/1990 0.02
01/02/1990 -0.03
Name: True, dtype: float64
我認為設置索引和堆棧是一個好主意,但是這是使用透視的替代方法:
(df.pivot(index='Date', columns='Sin', values='Ret')
.rename(columns={True: 'Ret1', False: 'Ret2'}))
Sin Ret1 Ret2
Date
01/01/1990 0.03 0.01
01/02/1990 0.02 0.05
我的解決方案僅針對最終輸出。
df.Sin=df.Sin.astype(int).replace({0:-1})
df.Ret=df.Sin.mul(df.Ret)
df.groupby('Date')['Ret'].agg({'Ret1-Ret2':'sum'})
Ret1-Ret2
Date
01/01/1990 0.02
01/02/1990 -0.03
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.