如何在pandas中为每个不同的ID添加新行?

2024-05-06 07:37:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个框架:

import pandas as pd
df = pd.DataFrame({'Car_ID': ['B332', 'B332', 'B332', 'C315', 'C315', 'C315', 'C315', 'C315', 'F310', 'F310'], \
                    'Date': ['2018-03-15', '2018-03-14', '2018-03-12', '2018-03-15', '2018-03-14', '2018-03-13', \
                             '2018-03-12', '2018-03-11', '2018-03-10', '2018-03-09'], \
                    'Driver': ['Alex', 'Alex', 'Alex', 'Sara', 'Sara', 'Sara', 'Sara', 'Sara', 'Franck','Franck'], \
                  'Info': ["Group_B", "Group_B", "Group_B", "Group_C", "Group_C", "Group_C", "Group_C", "Group_C", "Group_F", "Group_F"]})
df

    Car_ID  Date        Driver  Info
0   B332    2018-03-15  Alex    Group_B
1   B332    2018-03-14  Alex    Group_B
2   B332    2018-03-12  Alex    Group_B
3   C315    2018-03-15  Sara    Group_C
4   C315    2018-03-14  Sara    Group_C
5   C315    2018-03-13  Sara    Group_C
6   C315    2018-03-12  Sara    Group_C
7   C315    2018-03-11  Sara    Group_C
8   F310    2018-03-10  Franck  Group_F
9   F310    2018-03-09  Franck  Group_F

我想在每个不同的Car_ID之前添加新行,如下所示:

    Car_ID  Date        Driver  Info
0   B332    2018-03-15  Alex    Group_B
1   B332    2018-03-14  Alex    Group_B
2   B332    2018-03-12  Alex    Group_B
3   B332    2018-03-12  Alex    Changed
4   C315    2018-03-15  Sara    Group_C
5   C315    2018-03-14  Sara    Group_C
6   C315    2018-03-13  Sara    Group_C
7   C315    2018-03-12  Sara    Group_C
8   C315    2018-03-11  Sara    Group_C
9   C315    2018-03-11  Sara    Changed
10  F310    2018-03-10  Franck  Group_F
11  F310    2018-03-09  Franck  Group_F
12  F310    2018-03-09  Franck  Changed

我怎样才能通过shift()来完成这项工作

谢谢


Tags: infoiddfdatedrivergroupcarpd
1条回答
网友
1楼 · 发布于 2024-05-06 07:37:08

插入行很昂贵。您可以使用groupby+last,连接两个数据帧,然后sort_values

df_last = df.groupby('Car_ID', as_index=False).last().assign(Info='Changed')

res = pd.concat([df, df_last], ignore_index=True)\
        .sort_values('Car_ID')\
        .reset_index(drop=True)

print(res)

   Car_ID        Date  Driver     Info
0    B332  2018-03-15    Alex  Group_B
1    B332  2018-03-14    Alex  Group_B
2    B332  2018-03-12    Alex  Group_B
3    B332  2018-03-12    Alex  Changed
4    C315  2018-03-15    Sara  Group_C
5    C315  2018-03-14    Sara  Group_C
6    C315  2018-03-13    Sara  Group_C
7    C315  2018-03-12    Sara  Group_C
8    C315  2018-03-11    Sara  Group_C
9    C315  2018-03-11    Sara  Changed
10   F310  2018-03-10  Franck  Group_F
11   F310  2018-03-09  Franck  Group_F
12   F310  2018-03-09  Franck  Changed

相关问题 更多 >