2016-01-08 113 views
2

嘿,我试图在熊猫中结合两列,但由于某种原因,我遇到了麻烦。Concat与熊猫的两列

这里是我的数据:

OrderId OrderDate UserId TotalCharges CommonId PupId PickupDate Month Year 
0 262 1/11/2009 47 $ 50.67 TRQKD 2 1/12/2009 1 2009 
1 278 1/20/2009 47 $ 26.60 4HH2S 3 1/20/2009 1 2009 
2 294 2/3/2009 47 $ 38.71 3TRDC 2 2/4/2009 2 2009 
3 301 2/6/2009 47 $ 53.38 NGAZJ 2 2/9/2009 2 2009 
4 302 2/6/2009 47 $ 14.28 FFYHD 2 2/9/2009 2 2009 

我希望让他们做出它具有格式的新列时采取的列“月”和“年”:

"2009-1" 
"2009-1" 
"2009-1" 
"2009-2" 
"2009-2" 

当我尝试这样的:

df['OrderPeriod'] = df[['Year', 'Month']].apply(lambda x: '-'.join(x), axis=1) 

我得到这个错误:

TypeError         Traceback (most recent call last) 
<ipython-input-24-ebbfd07772c4> in <module>() 
----> 1 df['OrderPeriod'] = df[['Year', 'Month']].apply(lambda x: '-'.join(x), axis=1) 

/Users/robertdefilippi/miniconda2/lib/python2.7/site-packages/pandas/core/frame.pyc in apply(self, func, axis, broadcast, raw, reduce, args, **kwds) 
    3970      if reduce is None: 
    3971       reduce = True 
-> 3972      return self._apply_standard(f, axis, reduce=reduce) 
    3973    else: 
    3974     return self._apply_broadcast(f, axis) 

/Users/robertdefilippi/miniconda2/lib/python2.7/site-packages/pandas/core/frame.pyc in _apply_standard(self, func, axis, ignore_failures, reduce) 
    4062    try: 
    4063     for i, v in enumerate(series_gen): 
-> 4064      results[i] = func(v) 
    4065      keys.append(v.name) 
    4066    except Exception as e: 

<ipython-input-24-ebbfd07772c4> in <lambda>(x) 
----> 1 df['OrderPeriod'] = df[['Year', 'Month']].apply(lambda x: '-'.join(x), axis=1) 

TypeError: ('sequence item 0: expected string, numpy.int32 found', u'occurred at index 0') 

对于如何连接这两列我真的很茫然。

帮助?

回答

4

您需要将值转换为字符串才能使用连接。

df['OrderPeriod'] = df[['Year', 'Month']]\ 
    .apply(lambda x: '-'.join(str(value) for value in x), axis=1)