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
byds=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