Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按条件检测每列值的增减?_Python_Pandas - Fatal编程技术网

Python 如何按条件检测每列值的增减?

Python 如何按条件检测每列值的增减?,python,pandas,Python,Pandas,我有以下数据帧df: id col1 col2 col3 111 22 3 10 222 21 4 11 333 22 5 5 444 5 3 4 555 6 3 4 666 4 4 3 777 7 2 8 我需要解决一个棘手的任务。我想查找当col1值高于20时,值增加的

我有以下数据帧
df

id      col1    col2   col3
111     22      3      10
222     21      4      11
333     22      5      5
444     5       3      4
555     6       3      4
666     4       4      3
777     7       2      8
我需要解决一个棘手的任务。我想查找当
col1
值高于
20
时,值增加的所有列。“值增加”是指当
col1
值高于
20
时,至少65%的
col1
行的值大于列中位数至少30%

在我的示例中,当
col1
值高于
20
时,有3行:

id      col1    col2   col3
111     22      3      10
222     21      4      11
333     22      5      5
在这些行中,
col3
的第一行和第二行的值相对于中值至少增加了30%(
col3
的中值等于5)。此条件不适用于第三行的
col3
,但也可以,因为它至少适用于65%的行,即3行中的65%为1.95~2行

预期的输出是(不同的输出格式也可以,但应该清楚的是,
col3
已识别):


IIUC,在您的示例中,您应该输出
col2
col3

medians = df.median()

s = df[df.col1.gt(20)]

base = s.gt(medians + 0.3 * medians.abs())

(base.sum()/base.count()).gt(0.65)

中间带:

col1    7.0
col2    3.0
col3    5.0
dtype: float64
30%增长中位数:

col1    9.1
col2    3.9
col3    6.5
dtype: float64
第2列有2个值大于3.9,2个值大于1.95

    col1    col2    col3
0   22  3   10
1   21  4   11
2   22  5   5

问题是什么?欢迎来到SO,请花时间阅读该页面上的链接和其他链接。这是一个非常令人困惑的问题。这需要更好地解释,我真的不知道从哪里开始回答this@MattW.例如我举了一个例子。对不起,如果还不清楚的话。基本上,有两种情况:1)过滤
df
by
ds=df[df[“col1”]>20]
,2)从
ds
选择行值大于其中间值(大于30%)的列。
col1    7.0
col2    3.0
col3    5.0
dtype: float64
col1    9.1
col2    3.9
col3    6.5
dtype: float64
    col1    col2    col3
0   22  3   10
1   21  4   11
2   22  5   5