2024-05-02 01:31:31 发布
网友
我有一个熊猫数据框,看起来像附加的图像 每列井名为1、2、…、n,其生产起点不同。有些是在第5个月或第9个月,有些是在24个月后。 我想规范化所有项目的开始日期。也就是说,将所有非零值上移。 我知道这个示例代码只适用于7号井,但我想对其进行优化,并同时执行所有操作
df['Well 7'] = df['Well 7'].shift(-1)
我是新来的熊猫,我尝试在一个循环中,但数据帧名称在一个循环中不起作用
df['Well {0}'].format(well)
感谢您的帮助
在示例中,使用^{}检测井柱,cols\u井(可以省略此步骤,自己选择井柱)
然后我们可以用^{},shift\u cols\u Well计算0个首字母的数量。 因此,本系列告诉我们要传递给^{}的参数:
cols_Well = df.columns[df.columns.str.startswith('Well')] shift_cols_Well = df[cols_Well].ne(0).cumsum().eq(0).sum() #shift_cols_Well = df[cols_Well].eq(0).cumprod().sum() for col in cols_Well: df[col] = df[col].shift(-shift_cols_Well.loc[col])
示例
df = pd.DataFrame({'Time':range(1,10), 'Well 1':[0,2,3,4,5,6,7,8,9],'Well 2':[0,0,3,4,5,6,7,8,9]}) Time Well 1 Well 2 0 1 0 0 1 2 2 0 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 8 9 9 9
解决方案示例
cols_Well = df.columns[df.columns.str.startswith('Well')] shift_cols_Well = df[cols_Well].ne(0).cumsum().eq(0).sum() #shift_cols_Well = df[cols_Well].eq(0).cumprod().sum() for col in cols_Well: df[col] = df[col].shift(-shift_cols_Well.loc[col]) print(df) Time Well 1 Well 2 0 1 2.0 3.0 1 2 3.0 4.0 2 3 4.0 5.0 3 4 5.0 6.0 4 5 6.0 7.0 5 6 7.0 8.0 6 7 8.0 9.0 7 8 9.0 NaN 8 9 NaN NaN
细节
print(shift_cols_Well) Well 1 1 Well 2 2 dtype: int64
for col in df.columns: while df[col].iloc[0]==0: df[col]= df[col].shift(-1)
在示例中,使用^{} 检测井柱,cols\u井(可以省略此步骤,自己选择井柱)
然后我们可以用^{} ,shift\u cols\u Well计算0个首字母的数量。
因此,本系列告诉我们要传递给^{} 的参数:
示例
解决方案示例
细节
相关问题 更多 >
编程相关推荐