首页 > 解决方案 > 从 pandas `dataframe` 创建从到对

问题描述

我有一个输入数据框:

import pandas as pd
df_input = pd.DataFrame({
    'id' : ['id_1', 'id_1', 'id_1', 'id_2', 'id_2', 'id_2', 'id_3', 'id_4', 'id_4'],
    'stage' : ['A', 'B', 'C', 'B', 'C', 'D', 'B', 'A', 'D'],
    'date' : pd.to_datetime(['2020-01-01', '2020-01-03', '2020-01-15', 
                '2020-01-02', '2020-01-07', '2020-01-21', 
                '2020-01-05', '2020-01-03', '2020-01-05'])
})

在此处输入图像描述

从上面的数据框中,我想创建from-to对。id&列将date用于确定from& to,如果stage最后一对将是stage_name-None。预期输出:

在此处输入图像描述

标签: pythonpython-3.xpandasdataframe

解决方案


注意:尽量不要将变量命名为内置变量,例如:输入是内置变量- 我已将数据框视为inp

您可以在重命名并将其用作数据框后使用 shift aftersort_valuesassigncolumn to stage :

a = inp.sort_values(['id','date'])
out = a['stage'].to_frame('from').assign(to=a.groupby("id")['stage'].shift(-1))

print(out)

  from   to
0    A    B
1    B    C
2    C  NaN
3    B    C
4    C    D
5    D  NaN
6    B  NaN
7    A    D
8    D  NaN

推荐阅读