熊猫蟒蛇:如何根据列的条件追加?

时间:2020-04-06 10:30:58

标签: python pandas

说我有一个简单的数据框:

student_id    name   age   address
student1       a     12      us
student2       b     13      us
student3       c     13      uk

如果有条件,我想将年龄和地址的值附加到名称上,如果年龄为13,可以说将年龄和地址连接到名称上,就像这样:

student_id    name   age   address
student1       a     12      us
student2       b     13      us
student3       c     13      uk
             b-13-us
             c-13-uk

如何将其实现到当前数据框?

1 个答案:

答案 0 :(得分:3)

先用DataFrame.loc过滤列,再用Series.eq屏蔽,然后转换为字符串并连接在一起:

s = df.loc[df['age'].eq(13), ['name','age','address']].astype(str).agg('-'.join, 1)

然后用Series.to_frame创建一列DataFrame,如果要将所有列替换为空字符串,请添加DataFrame.reindex(现在age列也已混合-数字和字符串)并通过DataFrame.append

添加新行
df1 = s.to_frame('name').reindex(df.columns, fill_value='', axis=1)
df = df.append(df1, sort=False, ignore_index=True)
print (df)
  student_id     name age address
0   student1        a  12      us
1   student2        b  13      us
2   student3        c  13      uk
3             b-13-us            
4             c-13-uk            

对于新格式,将分别处理每列:

df0 = df[df['age'].eq(13)].copy()
s = df0['name'] + ' (' + df0['age'].astype(str) + '-' + df0['address'] + ')'
df1 = s.to_frame('name').reindex(df.columns, fill_value='', axis=1)
df = df.append(df1, sort=False, ignore_index=True)
print (df)
  student_id       name age address
0   student1          a  12      us
1   student2          b  13      us
2   student3          c  13      uk
3             b (13-us)            
4             c (13-uk)