【发布时间】:2021-03-22 09:07:09
【问题描述】:
dates=['2020-12-01','2020-12-03','2020-12-04', '2020-12-01','2020-12-03','2020-12-04']
symbols=['ABC','ABC','ABC','DEF','DEF','DEF']
v=[1,3,5,7,9,8]
df= pd.DataFrame({'date':dates, 'g':symbols, 'v':v})
date g v
0 2020-12-01 ABC 1
1 2020-12-03 ABC 3
2 2020-12-04 ABC 5
3 2020-12-01 DEF 7
4 2020-12-03 DEF 9
5 2020-12-04 DEF 8
I want to create new dataframe group by 'g' and tell me whether it is strictly increasing or not.
For example, output
g increasing
0 ABC 1
1 DEF 0
since ABC is always increasing whereas DEF is not.
我想也许我可以使用 diff() 然后选择具有负值的名称。 (这些名字我可以从列表中排除) 但是当我使用这个功能时,我失去了分组列:
df.groupby(by='g')['v'].diff()
0 NaN
1 2.0
2 2.0
3 NaN
4 2.0
5 -1.0
最好的方法是什么?
以下看起来不错,但不是我想要的(因为即使值保持不变,它也会返回 true)
>>> df.groupby(by='g')['v'].is_monotonic_increasing.reset_index()
g v
0 ABC True
1 DEF False
【问题讨论】:
-
请修正格式。
-
另外,按
g分组并检查它是否在增加是什么意思?g的每个值都有多个值。 -
我正在尝试找出ABC和DEF对应的列'v'是否一直在增加。
标签: python pandas group-by strict