我有一个带值的df,有些列的值增加,有些列的值减少或不改变。我想删除这些列。我尝试使用is_monotonic,但如果值增加,则返回boolean = TRUE,但如果值保持不变,则不包括
data = [{'a': 1, 'b': 2, 'c':33}, {'a':10, 'b': 2, 'c': 30}]
df = pd.DataFrame(data)
在上面的示例中,我只想保留列“ a”,因为其他两列相同或递减值。有人可以帮我吗?
答案 0 :(得分:3)
获取所有列的差异,仅删除第一个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()]