应用功能访问索引

时间:2019-02-07 10:12:49

标签: pandas python-2.7

早上好。

我有一个小问题,我敢肯定它有一个简单的解决方案,但我找不到它。

我有一个像这样的数据框:

df = 
    num        unit
0    10     minutes
1    20     seconds
2    30     newtons
3    10     seconds

而且,出于无关紧要的原因,我想重写num列,为其添加相应的单位,以得到下一个结果:

df = 
             num     unit
0   '10 minutes'  minutes
1   '20 seconds'  seconds
2   '30 newtons'  newtons
3   '10 seconds'  seconds

我正在使用以下代码:

df.num = df.num.apply(lambda x: '{n} {u}'.format(n = x, u = unidecode(df.loc[df[df.num == x].index.values[0], 'unit'])))

问题出现在第一列中有等于或大于2的相等值时,例如第0行和第3行,因此由于...values[0]而导致的我错误的最终结果是:

df = 
             num     unit
0   '10 minutes'  minutes
1   '20 seconds'  seconds
2   '30 newtons'  newtons
3   '10 minutes'  seconds

非常感谢您。

1 个答案:

答案 0 :(得分:2)

这里没有必要应用,将列转换为字符串并与联接:

df['num'] = df['num'].astype(str) + ' ' + df['unit']
print (df)
          num     unit
0  10 minutes  minutes
1  20 seconds  seconds
2  30 newtons  newtons
3  10 seconds  seconds

如果出于某种原因需要使用DataFrame.applyaxis=1进行按行处理和标量处理,则通过str将整数转换为字符串:

df['num'] = df.apply(lambda x: str(x['num']) + ' ' + x['unit'], axis=1)
#alternative
#df['num'] = df.apply(lambda x: ' '.join([str(x['num']), x['unit']]), axis=1)