我有以下数据框:
print(inventory_df)
dt_op Prod_1 Prod_2 Prod_n
1 10/09/18 5 50 2
2 11/09/18 4 0 0
3 12/09/18 2 0 0
4 13/09/18 0 0 0
5 14/09/18 4 30 1
我想将每个列中的最后一个值!=从零更改为零,如下所示:
print(final_inventory_df)
dt_op Prod_1 Prod_2 Prod_n
1 10/09/18 5 50 2
2 11/09/18 4 50 2
3 12/09/18 2 50 2
4 13/09/18 2 50 2
5 14/09/18 4 30 1
我该怎么办?
答案 0 :(得分:5)
想法是用https://github.com/sendgrid/sendgrid-csharp/issues/723将0
替换为NaN,然后用先前的非缺失值来填充它们:
cols = df.columns.difference(['dt_op'])
df[cols] = df[cols].mask(df[cols] == 0).ffill().astype(int)
与mask
相似的解决方案:
df[cols] = pd.DataFrame(np.where(df[cols] == 0, np.nan, df[cols]),
index=df.index,
columns=cols).ffill().astype(int)
print (df)
dt_op Prod_1 Prod_2 Prod_n
1 10/09/18 5 50 2
2 11/09/18 4 50 2
3 12/09/18 2 50 2
4 13/09/18 2 50 2
5 14/09/18 4 30 1
有趣的解决方案-将所有没有dt_op
的列都转换为整数:
d = dict.fromkeys(df.columns.difference(['dt_op']), 'int')
df = df.mask(df == 0).ffill().astype(d)
答案 1 :(得分:2)
另一个选择:
.q.rnd