我有一些具有4个有趣特征的数据:account_id
,location_id
,date_from
和date_to
。每个条目对应于一个客户帐户与特定位置相关联的时间段。
有些account_id
和location_id
对具有多个条目,且日期不同。这意味着该客户与该位置的关联时间较长,被多个连续的条目覆盖。
因此,我想创建一个额外的列,其中包含客户与给定位置相关联的总时间长度。我能够使用groupby
和apply
为每一对计算此值(请参见下面的代码)。这可以正常工作,但我不知道如何将其重新添加到原始数据帧中。新列。
lengths = non_zero_df.groupby(['account_id','location_id'], group_keys=False).apply(lambda x: x.date_to.max() - x.date_from.min())
谢谢
答案 0 :(得分:1)
我认为Mephy是正确的,应该将其传递给StackOverflow。
您将具有形状不兼容性,因为分组结果中的条目将少于原始表中的条目。您将需要执行与原始表和结果相同的SQL左外部联接操作,并且总长度将在新列中多次显示-每次您具有相等的(account_id,location_id )对,则新列中的值相同。 (这并不一定有问题,但是,例如,如果人们试图对新列进行总结,则可能会引起问题)
签出pandas.DataFrame.join(您也可以使用合并)。您需要将旧表的结果与(account_id,location_id)一起作为左侧(或外部)联接。