panda返回另一列事务的标准差为零的列中的值



我对熊猫比较陌生。我正在尝试返回行或客户ID,它们要么在单位列中的标准偏差为"0",要么每个后续事务之间的时间差小于10分钟。例如,在事务1、4、5以下的数据中,为50个单位,标准偏差为"0",同样,事务3和6的时间差为1秒,6&7相差3秒,所以应该返回第1、4、5、3、6、7行。请帮我解决我被卡住的问题。数据如表所示:

索引|customerid|code|transactionID|units|tstamp1|968794|200|46408|50|2019.06.28 00:03:222|874213|201|6526|25|2019.06.28 00:03:203 | 226292 | 202 | 18609 | 55 | 2019.06.28 00:03:224|968794|203|50466|50|2019.06.28 00:03:265|968794|204|65687|50|2019.06.28 00:03:336|226292|205|232|23|2019.06.28 00:03:237 | 226292 | 206 | 1232 | 45 | 2019.06.28 00:03:268 | 874213 | 207 | 3343 | 32 | 2019.06.28 00:23:459|874213|208|2343|54|2019.06.28 00:45:55

我已经尝试过这个代码,但不知道该往哪里走。对于我在这里的情况,代码应该返回客户ID为8968794和8226292的行。这是我尝试过的,但不知道如何从时间部分开始。

df1= df.loc[(df['units'].groupby(df['customerid']).std()==0)]

这给了我一个错误:IndexingError:作为索引器提供的不可对齐的布尔序列(布尔序列和索引对象的索引与不匹配

苏拉杰先生回答后,我已经尝试使用代码

df['TimeDiff'] = df.groupby('customerid')['tstamp'].transform(lambda g: (g.max()-g.min()).seconds)
df2 = df[df['TimeDiff']<600]
df3 = pd.concat([df1,df2]).drop_duplicates()

df3是:

|TimeDiff|code|customerid|index|tid|tstamp|units0 NaN | 200 | 8968794 | 1 | 46408 | 2019-06-28 00:03:22 503 NaN | 203 | 8968794 | 4 | 50466 | 2019-06-28 00:03:26 504 NaN|204|8968794|5|65687|2019-06-28 00:03:33 500 11.0|200|8968794|1|46408|2019-06-28 00:03:22 502 4.0 | 202 | 8226292 | 3 | 18609 | 2019-06-28 00:03:22 553 11.0|203|8968794|4|50466|2019-06-28 00:03:26 504 11.0|204|8968794|5|65687|2019-06-28 00:03:33 505 4.0 | 205 | 8226292 | 6 | 232 | 2019-06-28 00:03:23 236 4.0 | 206 | 8226292 | 7 | 1232 | 2019-06-28 00:03:26 45

当您分组并直接执行std时,结果只是唯一的customerid的大小(因为这是分组度量(,loc会给出错误。您需要的是转换函数,它为每个相应的行执行转换。

df1= df.loc[(df['units'].groupby(df['customerid']).transform('std')==0)]

对于问题的第二部分,要获得交易差额小于10分钟的客户id,

df['TimeDiff'] = df.groupby('customerid')['tstamp'].transform(lambda g: (g.max()-g.min()).seconds)
df2 = df[df['TimeDiff']<600]
df3 = pd.concat([df1,df2]).drop_duplicates()

df3应该是你想要的结果

最新更新