对于以下数据帧:
name date price percent
0 wh 2019/1/1 nan -0.1
1 wh 2019/2/1 nan 0.0
2 wh 2019/3/1 nan 0.0
3 wh 2019/4/1 nan 0.1
4 wh 2019/5/1 nan -0.1
5 wh 2019/6/1 2.5 0.0
6 sh 2018/6/1 nan nan
7 sh 2018/7/1 nan -0.4
8 sh 2018/8/1 nan 0.7
9 sh 2018/9/1 nan -0.5
10 sh 2018/10/1 nan 0.0
11 sh 2018/11/1 nan 0.4
12 sh 2018/12/1 nan 0.3
13 sh 2019/1/1 nan nan
14 sh 2019/6/1 2.4 0.0
在@WeNYoBen的帮助下:
df=df.set_index(['name','date']).unstack().stack(dropna=False).reset_index()
df['date']=pd.to_datetime(df['date'])
df1 = df.sort_values(['name','date'])
print(df1)
输出:
name date price percent
3 sh 2018-06-01 nan nan
4 sh 2018-07-01 nan -0.4
5 sh 2018-08-01 nan 0.7
6 sh 2018-09-01 nan -0.5
0 sh 2018-10-01 nan 0.0
1 sh 2018-11-01 nan 0.4
2 sh 2018-12-01 nan 0.3
7 sh 2019-01-01 nan nan
8 sh 2019-02-01 nan nan
9 sh 2019-03-01 nan nan
10 sh 2019-04-01 nan nan
11 sh 2019-05-01 nan nan
12 sh 2019-06-01 2.4 0.0
16 wh 2018-06-01 nan nan
17 wh 2018-07-01 nan nan
18 wh 2018-08-01 nan nan
19 wh 2018-09-01 nan nan
13 wh 2018-10-01 nan nan
14 wh 2018-11-01 nan nan
15 wh 2018-12-01 nan nan
20 wh 2019-01-01 nan -0.1
21 wh 2019-02-01 nan 0.0
22 wh 2019-03-01 nan 0.0
23 wh 2019-04-01 nan 0.1
24 wh 2019-05-01 nan -0.1
25 wh 2019-06-01 2.5 0.0
在列na
中用zero
填充percent
:
df1['percent'].fillna(0, inplace=True)
最后一步,如果我们拥有price
列的所有值,则可以使用df['percent']=df.groupby('name').price.pct_change()
计算df['percent']
,但是现在我需要使用percent
来计算{{1 }}。
最终结果如下:
price
如果还有其他问题,请告诉我。预先感谢。
相关参考:
答案 0 :(得分:1)
使用unstack
和stack
组合
df=df.set_index(['name','date']).unstack().stack(dropna=False).reset_index()
#df['date']=pd.to_datetime(df['date'])
#df=df.sort_values('date')
df['Pct']=df.groupby('name').price.pct_change()