概述
customer_id event_date data
1 2012-10-18 0
1 2012-10-12 0
1 2015-10-12 0
2 2012-09-02 0
2 2013-09-12 1
3 2010-10-21 0
3 2013-11-08 0
3 2013-12-07 1
3 2015-09-12 1
我希望添加其他列,例如’flag_1’和&下面的’flag_2′,允许我自己(以及其他我传递修改后的数据时)轻松过滤.
Flag_1表示该客户在数据集中的首次出现.我通过排序成功实现了这个:
dta.sort_values([ ‘CUSTOMER_ID’,‘EVENT_DATE’])
然后使用:dta.duplicated([‘customer_id’]).astype(int)
当列’数据’= 1时,Flag_2将指示每个客户的第一次发生.
实现的附加列的示例如下所示:
customer_id event_date data flag_1 flag_2
1 2012-10-18 0 1 0
1 2012-10-12 0 0 0
1 2015-10-12 0 0 0
2 2012-09-02 0 1 0
2 2013-09-12 1 0 1
3 2010-10-21 0 1 0
3 2013-11-08 0 0 0
3 2013-12-07 1 0 1
3 2015-09-12 1 0 0
我是pandas的新手并不确定如何实现’flag_2’列而不迭代整个数据帧 – 我认为有一种更快的方法来实现使用内置函数但没有找到任何帖子?
谢谢
# Initialize empty flags
df['flag1'] = 0
df['flag2'] = 0
# Set flag1
groups = df.groupby('customer_id').groups
df.loc[[values[0] for values in groups.values()],'flag1'] = 1
# Set flag2
groups2 = df.loc[df.data == 1,:].groupby('customer_id').groups
df.loc[[values[0] for values in groups2.values()],'flag2'] = 1
>>> df
customer_id event_date data flag1 flag2
0 1 2012-10-18 0 1 0
1 1 2012-10-12 0 0 0
2 1 2015-10-12 0 0 0
3 2 2012-09-02 0 1 0
4 2 2013-09-12 1 0 1
5 3 2010-10-21 0 1 0
6 3 2013-11-08 0 0 0
7 3 2013-12-07 1 0 1
8 3 2015-09-12 1 0 0
总结
以上是编程之家为你收集整理的python – pandas:根据列值在df中查找事件的第一个事件并标记为新的列值全部内容,希望文章能够帮你解决python – pandas:根据列值在df中查找事件的第一个事件并标记为新的列值所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧