gpt4 book ai didi

python - 根据指定深度动态回填 Pandas DataFrame

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

假设我有一个数据,以深度(米)来标记水的存在:

Depth   Water
1.9
1.91
2
2.92
2.94
2.97
2.98
3 1
3.02
3.03
3.05
3.07
3.11
4.08
4.11 1
5.12
5.22
6.13
6.18
6.2
6.22 1
7.12
7.45
7.6
8.6 1

我想使用 pandas 对此进行回填,这样上面的每一米都会被标记为 1,如下所示:

Depth   Water
1.9
1.91
2 1
2.92 1
2.94 1
2.97 1
2.98 1
3 1
3.02
3.03
3.05
3.07
3.11 1
4.08 1
4.11 1
5.12
5.22 1
6.13 1
6.18 1
6.2 1
6.22 1
7.12
7.45
7.6 1
8.6 1

我的Scratch代码如下:

#create function that will tag 1:
def label_water(row):
if row['Water'] == '1' :
return 1
else:
return ''

for i in np.where(df['Water']==1):
for j in i: # j is the lower depth
k = j-1 #k is now the upper depth
data['Water']=df.apply(lambda row: label_water(row) if k<df['Depth']<j)

但是它返回语法错误,我是否缺少某些内容?

最佳答案

我认为需要transform使用 last 和帮助器 Series 并减去列 Depth,最后按条件设置值:

s = df.groupby(df['Water'].iloc[::-1].eq('1').cumsum())['Depth'].transform('last')-df['Depth']
df['Water'] = np.where(s <=1, '1', '')

print (df)
Depth Water
0 1.90
1 1.91
2 2.00 1
3 2.92 1
4 2.94 1
5 2.97 1
6 2.98 1
7 3.00 1
8 3.02
9 3.03
10 3.05
11 3.07
12 3.11
13 4.08 1
14 4.11 1
15 5.12
16 5.22 1
17 6.13 1
18 6.18 1
19 6.20 1
20 6.22 1
21 7.12
22 7.45
23 7.60 1
24 8.60 1

详细信息:

print (df['Water'].iloc[::-1].eq('1').cumsum())
24 1
23 1
22 1
21 1
20 2
19 2
18 2
17 2
16 2
15 2
14 3
13 3
12 3
11 3
10 3
9 3
8 3
7 4
6 4
5 4
4 4
3 4
2 4
1 4
0 4
Name: Water, dtype: int32
<小时/>
print (s)
0 1.10
1 1.09
2 1.00
3 0.08
4 0.06
5 0.03
6 0.02
7 0.00
8 1.09
9 1.08
10 1.06
11 1.04
12 1.00
13 0.03
14 0.00
15 1.10
16 1.00
17 0.09
18 0.04
19 0.02
20 0.00
21 1.48
22 1.15
23 1.00
24 0.00
Name: Depth, dtype: float64

关于python - 根据指定深度动态回填 Pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51491732/

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