2017-03-09 39 views
3

我对熊猫和Python非常陌生。使用熊猫/ python将数据框中的两列数字组合成单列

我有一个3226 x 61数据框,我想将两列合并为一个。

我想合并的两列都是整数 - 一个有一个或两个数字(1到52),而另一个有三个数字(例如1或001,23或023)。我需要输出为五位整数(例如,01001或52023)。结果整数将不会有数学运算 - 我只需要它们用于查找目的。

基于一些在这个梦幻般的现场其他职位的,我试过如下:

df['YZ'] = df['Y'].map(str) + df['Z'].map(str) 

但是,“对第一列1.00001‘1’和第二列‘001返回’,我。相信因为做“1”海峡把它变成“1.0”,其中“001”被添加到年底

我也试过:

df['YZ'] = df['Y'].join(df['Z']) 

收到以下错误:

AttributeError: 'Series' object has no attribute 'join' 

我也试过:

df['Y'] = df['Y'].astype(int) 
df['Z'] = df['Z'].astype(int) 
df['YZ'] = df[['Y','Z']].apply(lambda x: ''.join(x), axis=1) 

得到以下错误:

TypeError: ('sequence item 0: expected str instance, numpy.int32 

found', 'occurred at index 0') 

列的副本如下:

1 1 
1 3 
1 5 
1 7 
1 9 
1 11 
1 13 

据我所知,这里有两个问题:

  • 结合两列
  • 获取正确的格式(五位数)

坦率地说,我要同时不禁会最欣赏柱相结合的问题。

回答

2

我想你需要转换列string,由zfill添加0,只是sum通过+

df['YZ'] = df['Y'].astype(str).str.zfill(2) + df['Z'].astype(str).str.zfill(3) 

样品:

df=pd.DataFrame({'Y':[1,3,5,7], 'Z':[10,30,51,74]}) 
print (df) 
    Y Z 
0 1 10 
1 3 30 
2 5 51 
3 7 74 

df['YZ'] = df['Y'].astype(str).str.zfill(2) + df['Z'].astype(str).str.zfill(3) 
print (df) 
    Y Z  YZ 
0 1 10 01010 
1 3 30 03030 
2 5 51 05051 
3 7 74 07074 

如果需要也改变原始列:

df['Y'] = df['Y'].astype(str).str.zfill(2) 
df['Z'] = df['Z'].astype(str).str.zfill(3) 
df['YZ'] = df['Y'] + df['Z'] 
print (df) 
    Y Z  YZ 
0 01 010 01010 
1 03 030 03030 
2 05 051 05051 
3 07 074 07074 

解决方案与join

df['Y'] = df['Y'].astype(str).str.zfill(2) 
df['Z'] = df['Z'].astype(str).str.zfill(3) 
df['YZ'] = df[['Y','Z']].apply('-'.join, axis=1) 
print (df) 
    Y Z  YZ 
0 01 010 01-010 
1 03 030 03-030 
2 05 051 05-051 
3 07 074 07-074 

,在不更改原有列:

df['YZ'] = df['Y'].astype(str).str.zfill(2) + '-' + df['Z'].astype(str).str.zfill(3) 
print (df) 
    Y Z  YZ 
0 1 10 01-010 
1 3 30 03-030 
2 5 51 05-051 
3 7 74 07-074 
+0

这似乎这样的伎俩 - 非常感谢你! – Newbie14

相关问题