我确实有以下数据:
A B
Date
2019-11-04 0 0
2019-11-05 0 0
2019-11-06 1 -2.197387
2019-11-07 1 -2.203836
2019-11-08 1 -2.208839
2019-11-09 -1 -2.207335
2022-11-10 -1 -0.968055
2022-11-11 -1 -0.971627
2022-11-12 0 0
2022-11-13 1 -0.974535
2022-11-14 1 -0.972994我期待的是以下几点:
A B
Date
2019-11-04 0 0
2019-11-05 0 0
2019-11-06 1 -2.197387
2019-11-07 1 -2.197387
2019-11-08 1 -2.197387
2019-11-09 -1 -2.207335
2022-11-10 -1 -2.207335
2022-11-11 -1 -2.207335
2022-11-12 0 0
2022-11-13 1 -0.974535
2022-11-14 1 -0.974535我尝试了..loc 1和..loc 1,条件是.iloc或.iloc必须是!=0,但在这两种情况下,0只是复制到下一行。
发布于 2022-03-29 07:49:17
使用GroupBy.pipe和GroupBy.first,将A的连续值与Series.cumsum的移位值进行比较
df['B'] = df.groupby(df.A.ne(df.A.shift()).cumsum())['B'].transform('first')
print (df)
A B
Date
2019-11-04 0 0.000000
2019-11-05 0 0.000000
2019-11-06 1 -2.197387
2019-11-07 1 -2.197387
2019-11-08 1 -2.197387
2019-11-09 -1 -2.207335
2022-11-10 -1 -2.207335
2022-11-11 -1 -2.207335
2022-11-12 0 0.000000
2022-11-13 1 -0.974535
2022-11-14 1 -0.974535另一种方法是使用Series.where替换每个连续值的非第一个值,并向前填充缺失的值(如果列中没有缺失值,则使用此方法):
df['B'] = df['B'].where(df.A.ne(df.A.shift())).ffill()
print (df)
A B
Date
2019-11-04 0 0.000000
2019-11-05 0 0.000000
2019-11-06 1 -2.197387
2019-11-07 1 -2.197387
2019-11-08 1 -2.197387
2019-11-09 -1 -2.207335
2022-11-10 -1 -2.207335
2022-11-11 -1 -2.207335
2022-11-12 0 0.000000
2022-11-13 1 -0.974535
2022-11-14 1 -0.974535https://stackoverflow.com/questions/71658256
复制相似问题