【问题标题】:Create new column in Pandas dataframe based on latest value per ID [duplicate]根据每个 ID 的最新值在 Pandas 数据框中创建新列 [重复]
【发布时间】:2020-06-24 14:54:52
【问题描述】:

我有df,在它下面我根据ID变量和时间变量T作为次要排序。

df = pd.DataFrame({
    'ID': ['a', 'b', 'c', 'b', 'b'],
    'T': [
        datetime.datetime(2019, 1, 1),
        datetime.datetime(2017, 1, 1),
        datetime.datetime(2018, 1, 1),
        datetime.datetime(2020, 1, 1),
        datetime.datetime(2021, 1, 1)],
    'V': [3, 5, 8, 6, 1]
}).sort_values(['ID', 'T'], ascending=False)

df

    ID  T           V
2   c   2018-01-01  8
4   b   2021-01-01  1
3   b   2020-01-01  6
1   b   2017-01-01  5
0   a   2019-01-01  3

我想添加一个新列 V_L,其中显示每个 ID 的最后一个值(基于时间列 T)。如果没有最后一个值,这应该由V_L 中的null 值指示。示例输出如下所示:

df
    ID  T           V   V_L
0   a   2018-01-01  8   NaN
1   b   2021-01-01  1   6.0
2   b   2020-01-01  6   5.0
3   b   2017-01-01  5   NaN
4   c   2019-01-01  3   NaN

【问题讨论】:

  • df['V_L'] = df.groupby('ID')['V'].shift(-1)
  • 你的 ID 是如何升序排列的?

标签: python pandas dataframe


【解决方案1】:

IIUC

df['V_L'] = df.groupby('ID').V.shift(-1)
df
Out[350]: 
  ID           T  V  V_L
2  c  2018-01-01  8  NaN
4  b  2021-01-01  1  6.0
3  b  2020-01-01  6  5.0
1  b  2017-01-01  5  NaN
0  a  2019-01-01  3  NaN

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 2022-11-16
    • 2020-08-18
    • 2019-02-04
    • 2022-10-13
    • 2021-03-19
    • 1970-01-01
    • 2021-04-13
    • 2020-11-13
    相关资源
    最近更新 更多