我在pandas中有一个数据框,其中包含column asset1_date,asset1_price,asset2_date,asset2_price等(最多约500个资产)。asset1_date和asset2_date不一定相同。我想将其重新格式化为一个面板,其中一列称为资产,然后一列表示日期,一列表示价格,即
pd.DataFrame({'asset':['asset1','asset1','asset2','asset2','asset2'],'date':['09/26/2003','09/29/2003','04/10/2007','04/11/2007','04/12/2007'],'price':[102,103,75,74,76]})
当前,数据如下:
pd.DataFrame({'asset1_date':['09/26/2003','09/29/2003',np.nan],'asset1_price':[102,103,np.nan],'asset2_date':['04/10/2007','04/11/2007','04/12/2007'],'asset2_price':[75,74,76]})
有人可以建议使用熊猫方法来实现这一目标吗?谢谢!
这应该可以解决问题:
df=df.stack().reset_index()
df["asset"]=df["level_1"].str.split("_").str[0]
df["col"]=df["level_1"].str.split("_").str[1]
df=df.set_index(["level_0", "col", "asset"]).unstack("col").reset_index("level_0", drop=True).reset_index("asset", drop=False).drop("level_1", axis=1, level=0)
#please note this following line is a bit of a brute force approach, since I'm assuming you want exactly these columns, alternative you can find in here:
#https://stackoverflow.com/a/47979382/11610186
df.columns=["asset", "date", "price"]
输出:
asset date price
0 asset1 09/26/2003 102
1 asset2 04/10/2007 75
2 asset1 09/29/2003 103
3 asset2 04/11/2007 74
4 asset2 04/12/2007 76
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句