Pandas数据帧 - 具有相同ID的数据的增量

时间:2015-10-22 16:19:13

标签: python pandas dataframe

我有一个如下所示的数据框:

  type  unique_id  val
0    X          1   11
1    X          2   12
2    Y          1   20
3    Y          2   30

所需的输出是

  type  unique_id  val delta
0    X          1   11 9
1    X          2   12 18
2    Y          1   20 0
3    Y          2   30 0

即,我希望将每个X与具有相同unique_id的Y相匹配(X中的ID是唯一的,Y中的ID是唯一的} S)。然后,我想计算每个val及其各自X行的Y差异。对于Y s,此值可以为0.

1 个答案:

答案 0 :(得分:1)

假设unique_id实际上对于给定类型是唯一的,您可以根据为类型Y过滤的数据对其进行分组。

gb = df[df.type == 'Y'].groupby('unique_id').first()
>>> gb
          type  val
unique_id          
1            Y   20
2            Y   30

然后将其加入原始数据框:

df = (df.set_index('unique_id')
        .join(gb, rsuffix='_'))
>>> df
          type  val type_  val_
unique_id                      
1            X   11     Y    20
1            Y   20     Y    20
2            X   12     Y    30
2            Y   30     Y    30

您现在可以计算delta:

df['delta'] = df.val_ - df.val

最后,将数据重新整形为您想要的格式:

df = (df.reset_index()
        .sort('type')
        .drop(['val_', 'type_'], axis='columns')

# Reorder columns.
>>> df[['type', 'unique_id', 'val', 'delta']]
  type  unique_id  val  delta
0    X          1   11      9
2    X          2   12     18
1    Y          1   20      0
3    Y          2   30      0