python - 在另一列中的两个条目之间查找列的最小值
问题描述
浏览 64 次
0
我在包含 1000 多行的数据框中有两列。A 列可以取值 X、Y、None。B 列包含从 50 到 100 的随机数。
每次在 A 列中出现非“无”事件时,都将其视为发生事件 4。因此,A 列中先前的非无事件将是发生 3,之前的将是发生 2,之前的将是发生 1。我想在发生4和发生3之间找到B列的最小值,并检查它是否大于发生2和发生1之间的B列最小值。结果可以作为“YES”或“NO”存储在数据框中的新列中。
样本输入
ROWNUM A B
1 None 68
2 None 83
3 X 51
4 None 66
5 None 90
6 Y 81
7 None 81
8 None 100
9 None 83
10 None 78
11 X 68
12 None 53
13 None 83
14 Y 68
15 None 94
16 None 50
17 None 71
18 None 71
19 None 52
20 None 67
21 None 82
22 X 76
23 None 66
24 None 92
例如,我需要找到 ROWNUM 14 和 ROWNUM 11 之间的 B 列的最小值,并检查它是否大于 ROWNUM 6 和 ROWNUM 3 之间的 B 列的最小值。接下来,我需要找到 ROWNUM 之间的最小值22 和 ROWNUM 14 并检查它是否大于 ROWNUM 11 和 ROWNNUM 6 之间的最小值,依此类推。
编辑:
在样本数据中,我们从第 14 行开始计算,因为那是 A 列的第四次非空出现。第 14 行和第 11 行之间的最小值是 53。第 6 行和第 3 行之间的最小值是 51 . 由于 53 > 51, ,它意味着 B 列在出现 4 和出现 3 之间的最小值大于 B 列在出现 2 和出现 1 之间的最小值。因此,第 14 行的输出将为“YES”或 1 .
接下来,在第 22 行,第 22 行和第 14 行之间的最小值为 50。第 11 行和第 6 行之间的最小值为 68。由于 50 < 68,这意味着出现 4 和出现 3 之间的最小值不大于出现之间的最小值2 和出现 1。因此,第 22 行的输出将为“NO”或 0。
我有以下代码。
import numpy as np
import pandas as pd
df = pd.DataFrame([[0, 0]]*100, columns=list('AB'), index=range(1, 101))
df.loc[[3, 6, 11, 14, 22, 26, 38, 51, 64, 69, 78, 90, 98], 'A'] = 1
df['B'] = np.random.randint(50, 100, size=len(df))
df['result'] = df.index[df['A'] != 0].to_series().rolling(4).apply(
lambda x: df.loc[x[2]:x[3], 'B'].min() > df.loc[x[0]:x[1], 'B'].min(), raw=True)
print(df)
当 A 列有输入 [0,1] 时,此代码有效。但我需要一个代码,其中 A 列可以包含 [None, X, Y]。此外,此代码产生的输出为 [0,1]。我需要输出为 [YES, NO]。
解决方案
这是我的方法:
def is_incr(x):
return x[:2].min() > x[2:].min()
# replace with s = df['A'] == 'None' if needed
s = df['A'].isna()
df['new_col'] = df.loc[s, 'B'].rolling(4).apply(is_incr)
输出:
ROWNUM A B new_col
0 1 NaN 68 NaN
1 2 NaN 83 NaN
2 3 X 51 NaN
3 4 NaN 66 NaN
4 5 NaN 90 1.0
5 6 Y 81 NaN
6 7 NaN 81 0.0
7 8 NaN 100 0.0
8 9 NaN 83 0.0
9 10 NaN 78 1.0
10 11 X 68 NaN
11 12 NaN 53 1.0
12 13 NaN 83 1.0
13 14 Y 68 NaN
14 15 NaN 94 0.0
15 16 NaN 50 1.0
16 17 NaN 71 1.0
17 18 NaN 71 0.0
18 19 NaN 52 0.0
19 20 NaN 67 1.0
20 21 NaN 82 0.0
21 22 X 76 NaN
22 23 NaN 66 0.0
23 24 NaN 92 1.0
推荐阅读
- javascript - 如何从 React 中的另一个页面 window.scrollTo?
- javascript - 如何在给定单位(小时、天、月、年)和数量的情况下增加 JavaScript 日期?
- html - 带有进度表的并排 DIV
- c# - 用于了解我的 Windows 设备上的可用存储空间量的 API
- c++ - 旋转光线追踪相机
- javascript - Vanilla JS 图像滑块使用数组来保存图像不工作
- excel - 通过 HTTP 链接从关闭的 Excel 工作簿中获取价值
- excel - 如何比较两个电子表格以查看 a 列是否匹配并且它们是否重叠范围 =true?
- lua - 将已定义的变量发送到不和谐的特定通道的正确语法是什么
- db2 - 通过 LotusScript 将数据添加到 DB2