Pandas:创建新列,根据条件从另一行中查找和选择值

2024-04-25 23:17:07 发布

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

我需要在Pandas中创建一个新列,从以前的数据中为特定ID查找特定星期中特定日期的值。数据如下所示:

ID / Day / Week / Value
1 / Mon / 5 / 10
1 / Tue / 5 / 12
1 / Wed / 5 / 17

2 / Mon / 5 / 12
2 / Tue / 5 / 14
2 / Wed / 5 / 12

3 / Mon / 5 / 16
3 / Tue / 5 / 19
3 / Wed / 5 / 22

1 / Mon / 6 / 12
1 / Tue / 6 / 17
1 / Wed / 6 / 16

2 / Mon / 6 / 15
2 / Tue / 6 / 15
2 / Wed / 6 / 20

3 / Mon / 6 / 10
3 / Tue / 6 / 14
3 / Wed / 6 / 17

1 / Mon / 7 / 12
1 / Tue / 7 / 19
1 / Wed / 7 / 22

2 / Mon / 7 / 13
2 / Tue / 7 / 14
2 / Wed / 7 / 25

3 / Mon / 7 / 11
3 / Tue / 7 / 16
3 / Wed / 7 / 20

现在让我们假设我想创建一个名为“Wk5Val”的新列,该列始终查找并选择第5周中同一ID的同一天的值。例如,对于ID=2,day=Tue,Week=7,该值应为14,因为这是ID=2&;的第5周值;天=星期二

在这一点上,我已经尝试了十几种不同的方法,但都无法解决这个问题。在我的脑海中,我认为它的工作原理相当于这样:

df[(df.Day == df.Day) & (df.week == 5) & (df.ID == df.ID)]['Value'].values[0]

但这只适用于特定值。我需要它来处理数据帧中的每一行,并根据“日”和“ID”进行调整

有什么直接的方法可以做到这一点吗


1条回答
网友
1楼 · 发布于 2024-04-25 23:17:07

IIUC

可以将布尔索引与merge一起使用

df.merge(df.loc[df['Week'] == 5, ['ID', 'Day', 'Value']],
         on=['ID', 'Day'], suffixes=['', '_Week5'])

    ID  Day  Week  Value  Value_Week5
0    1  Mon     5     10           10
1    1  Mon     6     12           10
2    1  Mon     7     12           10
3    1  Tue     5     12           12
4    1  Tue     6     17           12
5    1  Tue     7     19           12
6    1  Wed     5     17           17
7    1  Wed     6     16           17
8    1  Wed     7     22           17
9    2  Mon     5     12           12
10   2  Mon     6     15           12
11   2  Mon     7     13           12
12   2  Tue     5     14           14
13   2  Tue     6     15           14
14   2  Tue     7     14           14
15   2  Wed     5     12           12
16   2  Wed     6     20           12
17   2  Wed     7     25           12
18   3  Mon     5     16           16
19   3  Mon     6     10           16
20   3  Mon     7     11           16
21   3  Tue     5     19           19
22   3  Tue     6     14           19
23   3  Tue     7     16           19
24   3  Wed     5     22           22
25   3  Wed     6     17           22
26   3  Wed     7     20           22

相关问题 更多 >