在Pandas

时间:2016-03-18 21:44:59

标签: python pandas

这应该非常简单,但我找不到能产生可接受结果的解决方案。我有以下数据框:

 df = Building  Block   Lot 
       A         5731   54
       B         5738   34

现在我需要组合Block(dtype float64)和Lot(dtype float64)列,但前面所有组合都加上“30”并在Block之后直接添加“00”。期望的结果是:

df = Building  Block  Lot   BBL
      A        5731   54    3057310054
      B        5738   34    3057380034

似乎我尝试的任何解决方案都出了问题。我能够得到的最接近的是:

 In:  df['BBL'] = "30" + df.Block.map(str) + "00" + df.Lot
Out:  Building  Block  Lot   BBL
      A        5731   54    305731.00054.0
      B        5738   34    305738.00034.0

如您所见,它在每列之后添加.0。我尝试使用:

df['BBL'] = df.BBL.replace(to_replace=".0", value='', inplace=True)

但它没有效果。我在另一篇文章中找到的这个函数也是如此:

def trim_fraction(text):
if '.0' in text:
    return text[:text.rfind('.0')]
return text

我意识到有很多关于此的帖子,但它们似乎都不适用于我的具体情况。我必须遗漏一些非常明显的东西。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您希望首先将浮点数转换为整数然后转换为字符串:

In [78]: df['BBL'] = ('30' + df.Block.astype(pd.np.int64).astype(str) + '00' 
                      + df.Lot.astype(pd.np.int64).astype(str)).astype(pd.np.int64)

In [79]: df
Out[79]:
  Building   Block   Lot         BBL
0        A  5731.0  54.0  3057310054
1        B  5738.0  34.0  3057380034

In [80]: df.dtypes
Out[80]:
Building     object
Block       float64
Lot         float64
BBL           int64
dtype: object

答案 1 :(得分:0)

你可以保留数字:

(i+l,j+c)