使用groupby聚合熊猫数据框,然后使用apply ....,但是如何将输出添加回原始数据框?

时间:2018-07-25 10:56:24

标签: python pandas aggregation

我有一些具有4个有趣特征的数据:account_idlocation_iddate_fromdate_to。每个条目对应于一个客户帐户与特定位置相关联的时间段。

有些account_idlocation_id对具有多个条目,且日期不同。这意味着该客户与该位置的关联时间较长,被多个连续的条目覆盖。

因此,我想创建一个额外的列,其中包含客户与给定位置相关联的总时间长度。我能够使用groupbyapply为每一对计算此值(请参见下面的代码)。这可以正常工作,但我不知道如何将其重新添加到原始数据帧中。新列。

lengths = non_zero_df.groupby(['account_id','location_id'], group_keys=False).apply(lambda x: x.date_to.max() - x.date_from.min())

谢谢

1 个答案:

答案 0 :(得分:1)

我认为Mephy是正确的,应该将其传递给StackOverflow。

您将具有形状不兼容性,因为分组结果中的条目将少于原始表中的条目。您将需要执行与原始表和结果相同的SQL左外部联接操作,并且总长度将在新列中多次显示-每次您具有相等的(account_id,location_id )对,则新列中的值相同。 (这并不一定有问题,但是,例如,如果人们试图对新列进行总结,则可能会引起问题)

签出pandas.DataFrame.join(您也可以使用合并)。您需要将旧表的结果与(account_id,location_id)一起作为左侧(或外部)联接。