将多个列与中的数值组合在一起

2024-06-03 03:19:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

 df = Building  Block   Lot 
       A         5731   54
       B         5738   34

现在我需要组合Block(dtypefloat64)和Lot(dtypefloat64)列,但也需要在所有组合前面加上“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

我知道有很多关于这个的帖子,但是没有一个适合我的具体情况。我一定错过了一些很明显的东西。你知道吗

任何帮助都将不胜感激!你知道吗


Tags: 数据textinmapdfreturn解决方案out
2条回答

首先要将浮点数转换为整数,然后再转换为字符串:

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

您可以保存数字:

In [6]: 3*10**9+df.Block*10**4+df.Lot
Out[6]: 
0    3057310054
1    3057380034
dtype: int64

相关问题 更多 >