基于列的日期和值重新索引dataframe

2024-04-27 12:18:29 发布

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

假设我有以下数据帧

ID  StationID  Date         ParamName  ParamValue
0   A          1990-01-08   metal      0.5
1   A          1990-01-08   wood       1.4
2   A          1990-01-08   glass      9.7
3   B          1990-01-08   metal      0.8
4   B          1990-01-08   wood       4.8
5   C          1990-01-08   metal      0.6
6   A          1990-02-03   metal      0.5
7   A          1990-03-01   metal      1.2
8   B          1990-03-01   metal      0.9
9   C          1990-03-01   metal      1.1

dateStationID不同时,如何将dataframe的ID列重新索引为递增。如何将上面的数据帧重新索引到下面的数据帧(假设日期包含datetime对象)?你知道吗

ID  StationID  Date         ParamName  ParamValue
0   A          1990-01-08   metal      0.5
0   A          1990-01-08   wood       1.4
0   A          1990-01-08   glass      9.7
1   B          1990-01-08   metal      0.8
1   B          1990-01-08   wood       4.8
2   C          1990-01-08   metal      0.6
3   A          1990-02-03   metal      0.5
4   A          1990-03-01   metal      1.2
5   B          1990-03-01   metal      0.9
6   C          1990-03-01   metal      1.1

Tags: 数据对象iddataframedatetimedatemetalwood
1条回答
网友
1楼 · 发布于 2024-04-27 12:18:29

这是你需要的吗?你知道吗

df.assign(ID=(df.StationID!=df.StationID.shift()).cumsum()-1)
Out[151]: 
   ID StationID        Date ParamName  ParamValue
0   0         A  1990-01-08     metal         0.5
1   0         A  1990-01-08      wood         1.4
2   0         A  1990-01-08     glass         9.7
3   1         B  1990-01-08     metal         0.8
4   1         B  1990-01-08      wood         4.8
5   2         C  1990-01-08     metal         0.6
6   3         A  1990-02-03     metal         0.5
7   3         A  1990-02-03      wood         1.2
8   4         B  1990-02-03     metal         0.9
9   5         C  1990-02-03     metal         1.1

更新:-)

df['ID']=df.StationID+df.Date.astype(str)
df.assign(ID=(df.ID!=df.ID.shift()).cumsum()-1)
Out[163]: 
   ID StationID        Date ParamName  ParamValue
0   0         A  1990-01-08     metal         0.5
1   0         A  1990-01-08      wood         1.4
2   0         A  1990-01-08     glass         9.7
3   1         B  1990-01-08     metal         0.8
4   1         B  1990-01-08      wood         4.8
5   2         C  1990-01-08     metal         0.6
6   3         A  1990-02-03     metal         0.5
7   4         A  1990-03-01     metal         1.2
8   5         B  1990-03-01     metal         0.9
9   6         C  1990-03-01     metal         1.1

相关问题 更多 >