gpt4 book ai didi

python - 有没有办法从不同长度的 Pandas 数据框中移动多行?

转载 作者:行者123 更新时间:2023-12-01 13:10:56 25 4
gpt4 key购买 nike

我有一个看起来像附加图像的 Pandas 数据框 Dataframe I am working with名称为 Wells 1,2,..,n 的每一列都有不同的生产开始时间。有些是在第 5 个月或第 9 个月,有些是在 24 个月后。我想标准化所有这些的开始日期。也就是说,将所有非零值向上移动。我知道此示例代码仅适用于 Well 7,但我想对其进行优化并同时执行所有这些操作。

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

我是 pandas 的新手,我在循环中尝试过,但数据框名称在循环中不起作用。

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

感谢任何帮助!

最佳答案

使用Series.str.startswith检测 Well 列,例如 cols_Well(此步骤可以省略并自行选择列)。

然后我们可以用Series.cumsum计算出0首字母的个数| ,例如 shift_cols_Well。因此这个系列告诉我们要传递给 Series.shift 的参数:

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

关于python - 有没有办法从不同长度的 Pandas 数据框中移动多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59992582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com