首页 > 解决方案 > 使用熊猫有条件地移动列中的数据

问题描述

说我有这样的df

index   shift   value
0         1       A
1         0       nan
2         0       A 
3         1       A
4         0       nan
5         0       nan
6         0       A
7         0       nan

在代码之后,理想的输出是这样的:只有值有一个 1 on shift 向下移动一行

index   shift   value
0         1       nan
1         0       A
2         0       A 
3         1       nan
4         0       A
5         0       nan
6         0       A
7         0       nan

shift 列中的 1 只会发生在 value 列上有 nonna 值的情况下。我正在考虑使用 shift(),但它会将整个列值向下移动,这不是我想要的。

标签: pythonpandas

解决方案


尝试这个:

df['value'] = df.loc[np.arange(len(df)) - df['shift'].shift().fillna(0),'value'].to_numpy()
df['value'] = df['value'].where(df['shift'].eq(0))

推荐阅读