查找列的第一个值并分配给单独的coulmn pandas

时间:2015-07-14 08:49:40

标签: python pandas

假设我有以下数据集

table = [[datetime.datetime(2015, 1, 1), 1, 0.5],
         [datetime.datetime(2015, 1, 27), 1, 0.5],
         [datetime.datetime(2015, 1, 31), 1, 0.5],
         [datetime.datetime(2015, 2, 1), 1, 2],
         [datetime.datetime(2015, 2, 3), 1, 2],
         [datetime.datetime(2015, 2, 15), 1, 2], 
         [datetime.datetime(2015, 2, 28), 1, 2],
         [datetime.datetime(2015, 3, 1), 1, 3],
         [datetime.datetime(2015, 3, 17), 1, 3],
         [datetime.datetime(2015, 3, 31), 1, 3]]

df = pd.DataFrame(table, columns=['Date', 'Id', 'Value'])

如何找到列Value的第一个元素,并将其指定为dfId分组的单独列?这样df看起来像

        Date  Id  Value  First
0 2015-01-01   1    0.5   0.5
1 2015-01-27   1    0.5   0.5
2 2015-01-31   1    0.5   0.5
3 2015-02-01   1    2.0   0.5
4 2015-02-03   1    2.0   0.5
5 2015-02-15   1    2.0   0.5
6 2015-02-28   1    2.0   0.5
7 2015-03-01   1    3.0   0.5
8 2015-03-17   1    3.0   0.5
9 2015-03-31   1    3.0   0.5

这似乎是一个简单的问题,但我无法弄清楚解决方案。感谢任何建议,谢谢。

1 个答案:

答案 0 :(得分:1)

您可以对“ID”列进行分组,调​​用first返回该组的第一个值,这会返回一个以“Id”作为索引的系列,然后您可以调用map orig df'Id'列执行查找并为每个'Id'分配相应的值:

In [127]:
df['First'] = df['Id'].map(df.groupby('Id')['Value'].first())
df

Out[127]:
        Date  Id  Value  First
0 2015-01-01   1    0.5    0.5
1 2015-01-27   1    0.5    0.5
2 2015-01-31   1    0.5    0.5
3 2015-02-01   1    2.0    0.5
4 2015-02-03   1    2.0    0.5
5 2015-02-15   1    2.0    0.5
6 2015-02-28   1    2.0    0.5
7 2015-03-01   1    3.0    0.5
8 2015-03-17   1    3.0    0.5
9 2015-03-31   1    3.0    0.5

first的输出:

In [128]:
df.groupby('Id')['Value'].first()

Out[128]:
Id
1    0.5
Name: Value, dtype: float64