[英]Replace all values before last non-zero in a column with 0
我有 2 个具有相同索引和形状的数据框,比如说 A 和 B。我的目标是计算 df_B 中每行的总和,但是如果对于 df_A 中最后一个非零值以下的任何行,这些相应的行将不会被计算在内在 df_B 中的总和。 这是一个展示我在做什么的例子:
df_A = pd.DataFrame({'col1': [1,1,0,1,0], 'col2': [1,0,0,0,0]})
df_B = pd.DataFrame({'col1': [2,2,2,2,2], 'col2': [2,2,2,2,2]})
OR:
df_A:
col1|col2
1. |1.
1. |0
0. |0
1. |0
0. |0
df_B:
col1|col2
2. |2.
2. |2
2. |2
2. |2
2. |2
我想要的输出如下所示:
df_B:
col1|col2
2. |2.
2. |0
2. |0
2. |0
0. |0
对于 df_A 中的每一列,从最后一个非零值开始,df_B 中此位置之后的值将为 0。
这是我尝试过但被卡住的方法:
row_ix = df_A.shape[0]-df_A.ne(0).values[::-1].argmax(0)-1
for i in row_ix:
for col in df.columns:
df[col].values[:row_ix[i]] = 0
这是一种正确的方法,还是有更好的方法来做到这一点? 谢谢!
尝试这个 :
def zero_index(df, column_name):
indexer = df.index[df[column_name].eq(0)]
# checks if the values are consecutive
if np.any(np.diff(indexer) > 1):
return indexer[-1]
return indexer[0]
df_B.loc[zero_index(df_A, "col1") :, "col1"] = 0
df_B.loc[zero_index(df_A, "col2") :, "col2"] = 0
df_B
col1 col2
0 2 2
1 2 0
2 2 0
3 2 0
4 0 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.