繁体   English   中英

根据pandas中的当前值按顺序填充先前的值

[英]Filling in sequence previous values based on current value in pandas

我有一个pandas数据框,如下所示:

ID   Value
1      2
2      6
3      3
4      5

我想要一个新的数据帧

ID Value 1 0 1 1 1 2 2 0 2 1 2 2 2 3 2 4 2 5 2 6 3 1 3 2 3 3 3 4

任何建议将不胜感激。

使用带有repeatcumcount reindex来更新新值

df.reindex(df.index.repeat(df.Value+1)).assign(Value=lambda x : x.groupby('ID').cumcount())
Out[611]: 
   ID  Value
0   1      0
0   1      1
0   1      2
1   2      0
1   2      1
1   2      2
1   2      3
1   2      4
1   2      5
1   2      6
2   3      0
2   3      1
2   3      2
2   3      3
3   4      0
3   4      1
3   4      2
3   4      3
3   4      4
3   4      5

尝试,

new_df = df.groupby('ID').Value.apply(lambda x: pd.Series(np.arange(x+1)))\
.reset_index().drop('level_1', 1)


    ID  Value
0   1   0
1   1   1
2   1   2
3   2   0
4   2   1
5   2   2
6   2   3
7   2   4
8   2   5
9   2   6
10  3   0
11  3   1
12  3   2
13  3   3
14  4   0
15  4   1
16  4   2
17  4   3
18  4   4
19  4   5

使用stack和列表理解:

vals = [np.arange(i+1) for i in df.Value]

(pd.DataFrame(vals, index=df.ID)
    .stack().reset_index(1, drop=True).astype(int).to_frame('Value'))

    Value    
ID           
1       0    
1       1    
1       2    
2       0    
2       1    
2       2    
2       3    
2       4    
2       5    
2       6    
3       0    
3       1    
3       2    
3       3    
4       0    
4       1    
4       2    
4       3    
4       4    
4       5    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM