如何在另一列的基础上添加到另一列

2024-09-28 23:20:03 发布

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

现在我有一张这样的桌子

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

我怎样才能在熊猫中获得这样的专栏呢?以列表的形式做最好吗?你知道吗

谢谢!你知道吗


Tags: id列表typenan形式桌子previouscurrently
2条回答

用途:

df['Previous_Injuries']=( df['Injury_Type'].replace('Nan',np.nan).fillna(' ')
                                          .cumsum().shift(fill_value='')
                                          .str.split() )
print(df)

如果nan不是str,则可以省略replace('Nan', np.nan)


   ID    Previous_Injuries  Currently_Injured Injury_Type
0   1                   []                  0         Nan
1   1                   []                  1       Ankle
2   1              [Ankle]                  0         Nan
3   1              [Ankle]                  1       Wrist
4   1       [Ankle, Wrist]                  0         Nan
5   1       [Ankle, Wrist]                  1         Leg
6   1  [Ankle, Wrist, Leg]                  0         Nan

对differents ID使用^{}

df['Previous_Injuries']=( df.groupby('ID')['Injury_Type']
                            .apply(lambda x: x.replace('Nan',np.nan).fillna(' ')
                                              .cumsum().shift(fill_value='')
                                              .str.split()) )
print(df)

   ID    Previous_Injuries  Currently_Injured Injury_Type
0   1                   []                  0         Nan
1   1                   []                  1       Ankle
2   1              [Ankle]                  0         Nan
3   1              [Ankle]                  1       Wrist
4   1       [Ankle, Wrist]                  0         Nan
5   1       [Ankle, Wrist]                  1         Leg
6   1  [Ankle, Wrist, Leg]                  0         Nan
7   2                   []                  1         Leg
8   2                [Leg]                  0         Nan

我们可以用cumsumshift,然后split字符串,注意这里您使用的是Nan(字符串类型),它不是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)

相关问题 更多 >