4
我有一个数据帧,看起来像这样:大熊猫:求解基于列值以及标记为新列DF事件第一发生率值
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)
Flag_2将每个客户的第一入射的指示时,列“数据” = 1
什么样的一个例子实施额外的列看起来象下面这样:
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
我是新来的熊猫和不确定如何在不遍历整个数据框贯彻“flag_2”列 - 我相信有实现使用内置函数b更快的方法ut没有发现任何帖子?
谢谢
我试图实现您对我的数据集的解决方案,然而“标志1”值的数量并不似乎是正确的(在使用'df.customer_id.unique()。shape'检查)。 它似乎使用'[values [0]为groups.values()]中的值创建的列表是正确的长度,所以我认为它必须是与df.loc分配有关? 我也尝试过使用:'df.iloc [[values [0]为groups.values()],df.columns.get_loc('flag1')] = 1',这似乎并不正确'flag1'赋值中的值也是。 – user
它出现'df.iloc [[values [0]为groups.values()]中的值,df.columns.get_loc('flag1')]'标识了赋值的正确df条目(使用'= 1'时) 。但是加上'= 1'后,不同的行选择的值为1.这是一个熊猫错误吗?我正在使用v。0.17.0 – user
你能复制我的结果吗? – Alexander