Python 将多个列与Pandas中的数值组合在一起
这应该很简单,但我找不到一个能产生可接受结果的解决方案。我有以下数据帧:Python 将多个列与Pandas中的数值组合在一起,python,pandas,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
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
我知道有很多关于这方面的帖子,但在我的具体案例中似乎没有一篇是有效的。我一定错过了一些非常明显的东西
任何帮助都将不胜感激 首先要将浮点数转换为整数,然后再转换为字符串:
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
谢谢你这么快的回复。不幸的是,这仍然返回一个带小数的字符串。我不知道为什么它会这样对待值,因为那里根本不应该有浮点数据类型。@Steven,我已经更新了我的答案-这就是你想要的吗?谢谢,但是当我使用它时,我得到了以下错误:ValueError:invalid literal for int()以10为基数:“305731.00054.0”我现在知道了-您必须先将浮点值更改为int,然后再更改为strings