假设我有以下数据集
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
的第一个元素,并将其指定为df
中Id
分组的单独列?这样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
这似乎是一个简单的问题,但我无法弄清楚解决方案。感谢任何建议,谢谢。
答案 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