我有一个带有值的 df,有些列的值正在增加,有些列的值正在减少或不变化。我想删除这些列。我尝试使用is_monotonic但如果值增加,则返回布尔值 = TRUE,但不包括值保持不变的情况
data = [{'a': 1, 'b': 2, 'c':33}, {'a':10, 'b': 2, 'c': 30}]
df = pd.DataFrame(data)
在上面的示例中,我只想保留"a"列,因为其他两列的值相同或递减。 谁能帮我?
获取所有列的差异,首先仅删除 NaNs 行并比较是否所有值都大于0
:
df = df.loc[:, df.diff().iloc[1:].gt(0).all()]
print (df)
a
0 1
1 10
详情:
print (df.diff())
a b c
0 NaN NaN NaN
1 9.0 0.0 -3.0
print (df.diff().iloc[1:])
a b c
1 9.0 0.0 -3.0
print (df.diff().iloc[1:].gt(0))
a b c
1 True False False
print (df.diff().iloc[1:].gt(0).all())
a True
b False
c False
dtype: bool
或者像注释中提到的更改逻辑 - 如果 les 或等于 0 则获取任何列,并通过~
更改掩码:
df = df.loc[:, ~df.diff().le(0).any()]