我正在检查一个事件是否发生在同一天的多个日期和地点。在简化表中有一个日期列、一个位置列和一个事件列。我需要创建一个名为“事件检查”的新专栏。EVENTCHECK应该将当前行中的DATE与上面的所有行进行比较,如果匹配,则检查该日期行上的事件列是否为1,并返回1。
下面是虚拟数据表:
import pandas as pd
df = pd.DataFrame()
df['DATE'] = ['2022-01-01','2022-01-02','2022-01-03','2022-01-04','2022-01-05','2022-01-01','2022-01-02','2022-01-03','2022-01-04','2022-01-05']
df['LOCATION'] = ['A','A','A','A','A','B','B','B','B','B']
df['EVENT'] = [1,1,1,1,1,0,0,0,0,0]
EVENTCHECK列中的正确结果应为True。我试过下面的方法,也试过使用掩码,但不知道如何将当前行与日期列中的前一行进行比较。任何帮助都是真诚的感谢。
import pandas as pd
df = pd.DataFrame()
df['DATE'] = ['2022-01-01','2022-01-02','2022-01-03','2022-01-04','2022-01-05','2022-01-01','2022-01-02','2022-01-03','2022-01-04','2022-01-05']
df['LOCATION'] = ['A','A','A','A','A','B','B','B','B','B']
df['EVENT'] = [1,1,1,1,1,0,0,0,0,0]
df['EVENT_CHECK'] = (df['DATE'].isin(df['DATE'])) & (df['EVENT'] == 1)
print(df)
2条答案
按热度按时间polhcujo1#
如果这些值等于所有先前值,则当前值等于第一个值,并且没有先前值不不同。
然后,您可以使用
groupby.transform('first')
进行比较,然后使用groupby.cummin
:与
groupby.apply
相同的逻辑:.sort_values(by=['LOCATION', 'DATE'])
作为预备步骤。只有1个重要
如果你只对
1
感兴趣,那么你可以简化为:输出:
更有意义的示例:
替代
为了好玩,如果日期对所有地点都是通用的,这里有一个重塑和
merge
的替代方案:k5ifujac2#
如果你想以最有效的方式(矢量化)来实现,你可以这样做:
输出(我添加了额外的非事件日期):