有没有办法从不同长度的数据帧中移动多行?

2024-05-02 01:31:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,看起来像附加的图像 Dataframe I am working with 每列井名为1、2、…、n,其生产起点不同。有些是在第5个月或第9个月,有些是在24个月后。 我想规范化所有项目的开始日期。也就是说,将所有非零值上移。 我知道这个示例代码只适用于7号井,但我想对其进行优化,并同时执行所有操作

df['Well 7'] = df['Well 7'].shift(-1)

我是新来的熊猫,我尝试在一个循环中,但数据帧名称在一个循环中不起作用

  df['Well {0}'].format(well)

感谢您的帮助


Tags: 数据项目代码图像名称format示例df
2条回答

在示例中,使用^{}检测井柱,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)

相关问题 更多 >