Skip to main content
 首页 » 编程设计

python之如何根据另一列添加到 Pandas 列

2025年05月04日11zhwl

目前我有一个看起来像这样的表

ID       Previous_Injuries    Currently_Injured      Injury_Type 
1            Nan                      0                  Nan 
1            Nan                      1                  Ankle 
1            Nan                      0                  Nan 
1            Nan                      1                  Wrist 
1            Nan                      0                  Nan 
1            Nan                      1                  Leg 
1            Nan                      0                  Nan 
2            Nan                      1                  Leg 
2            Nan                      0                  Nan 

我想添加到以前的伤害列并使我的表格看起来像这样:

ID       Previous_Injuries    Currently_Injured      Injury_Type 
1            Nan                      0                  Nan 
1            Nan                      1                  Ankle 
1            [Ankle]                  0                  Nan 
1            [Ankle]                  1                  Wrist 
1            [Ankle,Wrist]            0                  Nan 
1            [Ankle,Wrist]            1                  Leg 
1            [Ankle,Wrist,Leg]        0                  Nan 
2            Nan                      1                  Leg 
2            [Leg]                    0                  Nan 
 

如何在 pandas 中实现这种专栏?最好以列表的形式来做吗?

谢谢!

请您参考如下方法:

我们可以用cumsum做shift,然后split字符串,注意这里你使用的是Nan (string type) ,不是np.nan

s=df.Injury_Type.shift().fillna('Nan').add(',').cumsum().str[:-1].str.split(',') 
df['new']=[[y  for y in x if y != 'Nan'] for x in s ] 
df 
Out[322]:  
   ID Previous_Injuries  Currently_Injured Injury_Type                  new 
0   1               Nan                  0         Nan                   [] 
1   1               Nan                  1       Ankle                   [] 
2   1               Nan                  0         Nan              [Ankle] 
3   1               Nan                  1       Wrist              [Ankle] 
4   1               Nan                  0         Nan       [Ankle, Wrist] 
5   1               Nan                  1         Leg       [Ankle, Wrist] 
6   1               Nan                  0         Nan  [Ankle, Wrist, Leg] 

再换题!

l=[] 
for name , dfx in df.groupby('ID'): 
    s = dfx.Injury_Type.shift().fillna('Nan').add(',').cumsum().str[:-1].str.split(',') 
    dfx['new'] = [[y for y in x if y != 'Nan'] for x in s] 
    l.append(dfx) 
 
pd.concat(l)