有一个pandas数据帧,需要在group内的列中找到低于某个值的最后一个值。
dataframe is as following:
region year month signal
A 2010 2 20
A 2010 3 32
A 2010 4 24
A 2010 6 50
.......
A 2011 1 20
.......
B 2010 2 100
B 2010 3 20
.......现在,我需要添加一列标志来标记每个"region“、" year”组合在上半年低于25的最后一个值。因此,以2010年上半年的区域A为例,4月信号值将被标记为1。对此有什么建议吗?谢谢。
发布于 2020-02-26 16:02:31
首先按boolean indexing筛选行,按Series.lt筛选较少的条件,然后使用DataFrame.duplicated作为组合region和year的最后一个值。赋值给带有Series.reindex的列,将misisng值替换为False,最后通过将掩码转换为整数来映射True->1和False->0
m = ~df.loc[df['month'].lt(7) & df['signal'].lt(25)].duplicated(['region','year'], keep='last')
df['new'] = m.reindex(df.index, fill_value=False).astype(int)
print (df)
region year month signal new
0 A 2010 2 20 0
1 A 2010 3 32 0
2 A 2010 4 24 1
3 A 2010 6 50 0
4 A 2011 1 20 1
5 B 2010 2 100 0
6 B 2010 3 20 1https://stackoverflow.com/questions/60409213
复制相似问题