英文:
Select largest/smallest value from data frame line by line or chunk wise
问题
我们有以下数据框。
| Val1 | Val2 | H | L |
| ---- | ---- | --- | ------ |
| 244.2 | 233.05 | H | 无 |
| 261.2 | 252.8 | H | 无 |
| 242.35 | 235.8 | H | 无 |
| 251.1 | 244.55 | H | 无 |
| 244.5 | 239.55 | 无 | L |
| 271.25 | 262.55 | H | 无 |
| 274 | 270.45 | H | 无 |
| 245.05 | 236.65 | 无 | L |
| 243.35 | 237.55 | 无 | L |
| 255.7 | 251.55 | H | 无 |
| 248.8 | 243.2 | 无 | L |
| 283.75 | 272.15 | H | 无 |
| 269.45 | 262.7 | 无 | L |
| 260.6 | 254.6 | H | 无 |
| 285 | 275 | 无 | L |
| 272.5 | 265.35 | 无 | L |
| 267 | 254.85 | 无 | L |
| 256.65 | 253.5 | 无 | L |
| 268 | 257.75 | H | 无 |
| 272.1 | 266.75 | H | 无 |
| 281.45 | 272.85 | 无 | L |
| 288.75 | 282.05 | H | 无 |
| 268.75 | 264.5 | 无 | L |
| 283 | 275.75 | 无 | L |
| 285.95 | 278.15 | H | 无 |
| 271.35 | 265.2 | 无 | L |
| 308.15 | 300 | H | 无 |
| 312.85 | 304.7 | H | 无 |
| 311.55 | 302.2 | 无 | L |
| 327.4 | 318.65 | H | 无 |
| 327 | 319.5 | H | 无 |
| 318.7 | 313.9 | 无 | L |
| 293.1 | 283.45 | 无 | L |
| 306 | 301.5 | H | 无 |
| 303.9 | 296.2 | 无 | L |
| 293.4 | 261.55 | 无 | L |
| 302.8 | 298.1 | H | 无 |
| 293.7 | 289.05 | 无 | L |
| 267.95 | 264.05 | 无 | L |
| 276.55 | 273.2 | H | 无 |
| 268.15 | 255 | 无 | L |
| 314 | 303.9 | 无 | L |
| 324.2 | 311.05 | H | 无 |
| 332.35 | 323.8 | H | 无 |
| 312.35 | 306.3 | H | 无 |
| 308.4 | 300.2 | 无 | L |
| 312.5 | 308.55 | 无 | L |
| 365.7 | 355.6 | H | 无 |
| 334 | 318.8 | H | 无 |
| 319.3 | 313.95 | 无 | L |
| 327.8 | 323.15 | H | 无 |
我想要一个数据框,在 H 和 L 值之间交替。但是如框架中所示,一些 H 值在以下时间序列数据中形成了集群。我希望在 H 字段中选择集群中的最高值,在 L 字段中选择集群中的最低值。
输出应如下所示。
| Val1 | Val2 | H | L |
| ------ | ------ | ------ | ------ |
| 261.2 | 252.8 | H | 无 |
| 244.5 | 239.55 | 无 | L |
| 274 | 270.45 | H | 无 |
| 245.05 | 236.65 | 无 | L |
| 255.7 | 251.55 | H | 无 |
| 248.8 | 243.2 | 无 | L |
| 283.75 | 272.15 | H | 无 |
| 269.45 | 262.7 | 无 | L |
| 260.6 | 254.6 | H | 无 |
| 256.65 | 253.5 | 无 | L |
| 272.1 | 266.75 | H | 无 |
| 281.45 | 272.85 | 无 | L |
| 288.75 | 282.05 | H | 无 |
| 268.75 | 264.5 | 无 | L |
| 285.95 | 278.15 | H | 无 |
| 271.35 | 265.2 | 无 | L |
| 312.85 | 304.7 | H | 无 |
| 311.55 | 302.2 | 无 | L |
| 327.4 | 318.65 | H | 无 |
| 293.1 | 283.45 | 无 | L |
| 306 | 301.5 | H | 无 |
| 293.4 | 261.55 | 无 | L |
| 302.8 | 298.1 | H | 无 |
| 267.95 | 264.05 | 无 | L |
| 276.55 | 273.2 | H | 无 |
| 268.15 | 255 | 无 | L |
| 332.35 | 323.8 | H | 无 |
| 308.4 | 300.2 | 无 | L |
| 365.7 | 355.6 | H | 无 |
| 319.3 | 313.95 | 无 | L |
| 327.8 | 323.15 | H | 无 |
英文:
We have the following data frame.
Val1 | Val2 | H | L |
---|---|---|---|
244.2 | 233.05 | H | None |
261.2 | 252.8 | H | None |
242.35 | 235.8 | H | None |
251.1 | 244.55 | H | None |
244.5 | 239.55 | None | L |
271.25 | 262.55 | H | None |
274 | 270.45 | H | None |
245.05 | 236.65 | None | L |
243.35 | 237.55 | None | L |
255.7 | 251.55 | H | None |
248.8 | 243.2 | None | L |
283.75 | 272.15 | H | None |
269.45 | 262.7 | None | L |
260.6 | 254.6 | H | None |
285 | 275 | None | L |
272.5 | 265.35 | None | L |
267 | 254.85 | None | L |
256.65 | 253.5 | None | L |
268 | 257.75 | H | None |
272.1 | 266.75 | H | None |
281.45 | 272.85 | None | L |
288.75 | 282.05 | H | None |
268.75 | 264.5 | None | L |
283 | 275.75 | None | L |
285.95 | 278.15 | H | None |
271.35 | 265.2 | None | L |
308.15 | 300 | H | None |
312.85 | 304.7 | H | None |
311.55 | 302.2 | None | L |
327.4 | 318.65 | H | None |
327 | 319.5 | H | None |
318.7 | 313.9 | None | L |
293.1 | 283.45 | None | L |
306 | 301.5 | H | None |
303.9 | 296.2 | None | L |
293.4 | 261.55 | None | L |
302.8 | 298.1 | H | None |
293.7 | 289.05 | None | L |
267.95 | 264.05 | None | L |
276.55 | 273.2 | H | None |
268.15 | 255 | None | L |
314 | 303.9 | None | L |
324.2 | 311.05 | H | None |
332.35 | 323.8 | H | None |
312.35 | 306.3 | H | None |
308.4 | 300.2 | None | L |
312.5 | 308.55 | None | L |
365.7 | 355.6 | H | None |
334 | 318.8 | H | None |
319.3 | 313.95 | None | L |
327.8 | 323.15 | H | None |
I want a data frame which alternates between H and L values. However as seen in the frame, few H values have formed clusters in the following time series data. I want to select the highest value amongst the cluster for H fields and lowest value amongst the cluster for L fields.
The output should look as follows.
Val1 | Val2 | H | L |
---|---|---|---|
261.2 | 252.8 | H | None |
244.5 | 239.55 | None | L |
274 | 270.45 | H | None |
245.05 | 236.65 | None | L |
255.7 | 251.55 | H | None |
248.8 | 243.2 | None | L |
283.75 | 272.15 | H | None |
269.45 | 262.7 | None | L |
260.6 | 254.6 | H | None |
256.65 | 253.5 | None | L |
272.1 | 266.75 | H | None |
281.45 | 272.85 | None | L |
288.75 | 282.05 | H | None |
268.75 | 264.5 | None | L |
285.95 | 278.15 | H | None |
271.35 | 265.2 | None | L |
312.85 | 304.7 | H | None |
311.55 | 302.2 | None | L |
327.4 | 318.65 | H | None |
293.1 | 283.45 | None | L |
306 | 301.5 | H | None |
293.4 | 261.55 | None | L |
302.8 | 298.1 | H | None |
267.95 | 264.05 | None | L |
276.55 | 273.2 | H | None |
268.15 | 255 | None | L |
332.35 | 323.8 | H | None |
308.4 | 300.2 | None | L |
365.7 | 355.6 | H | None |
319.3 | 313.95 | None | L |
327.8 | 323.15 | H | None |
I tried a variety of functions from pandas but cannot get such desired result.
答案1
得分: 1
以下是代码的中文翻译:
# 确保将字符串 'None' 和 NaN 转换为真正的 None
df = df.replace('None', None)
# 标识空值
m1 = df['H'].isna()
m2 = df['L'].isna()
# 创建连续非空值的分组
# 获取每个 H 组的最大 Val1 的行
# 和每个 L 组的最小 Val1 的行
idx = (set(df['Val1'].groupby(m1.cumsum()[~m1]).idxmax())
| set(df['Val1'].groupby(m2.cumsum()[~m2]).idxmin())
)
# 索引这些行
out = df.loc[sorted(idx)]
输出结果不需要翻译,因为它已经是中文的代码输出。
英文:
You can use:
# ensure real None/NaN
df = df.replace('None', None)
# identify null values
m1 = df['H'].isna()
m2 = df['L'].isna()
# make groups of consecutive non-null
# get rows with max Val1 per group of H
# and rows with min Val1 per group of L
idx = (set(df['Val1'].groupby(m1.cumsum()[~m1]).idxmax())
|set(df['Val1'].groupby(m2.cumsum()[~m2]).idxmin())
)
# index those rows
out = df.loc[sorted(idx)]
Output:
Val1 Val2 H L
1 261.20 252.80 H None
4 244.50 239.55 None L
6 274.00 270.45 H None
8 243.35 237.55 None L
9 255.70 251.55 H None
10 248.80 243.20 None L
11 283.75 272.15 H None
12 269.45 262.70 None L
13 260.60 254.60 H None
17 256.65 253.50 None L
19 272.10 266.75 H None
20 281.45 272.85 None L
21 288.75 282.05 H None
22 268.75 264.50 None L
24 285.95 278.15 H None
25 271.35 265.20 None L
27 312.85 304.70 H None
28 311.55 302.20 None L
29 327.40 318.65 H None
32 293.10 283.45 None L
33 306.00 301.50 H None
35 293.40 261.55 None L
36 302.80 298.10 H None
38 267.95 264.05 None L
39 276.55 273.20 H None
40 268.15 255.00 None L
43 332.35 323.80 H None
45 308.40 300.20 None L
47 365.70 355.60 H None
49 319.30 313.95 None L
50 327.80 323.15 H None
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论