在python中,如何在一个数字中找到小数位数,同时也计算后面的零

2024-03-29 01:22:09 发布

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

我的问题是使用python或pandas计算小数点后的位数。到目前为止回答的问题首先将浮点数转换为字符串,然后计算小数点后的字符数。在将decimal转换为str()时,尾部的零丢失。但在我的例子中,我需要计算小数点后的总位数,包括尾随的零,如果它存在的话。也就是说,对于数字7.80,答案应该是小数点后的两位数,而不是一位数,当然,对于7.8,答案应该是小数点后的一位数。如果可能的话请告诉我。你知道吗

实际上我的问题是: 假设我有一个熊猫系列如下:

0.123
0.124
0.123
0.349
0.349
0.340

我想生成两个特征。现有数据的一个简单值\u counts()。 所以答案是:

0.123   2
0.124   1
0.123   2
0.349   2
0.349   2
0.340   1

删除最后一个数字后,另一个特征生成将是value\u counts()。新功能包括:

0.123   3
0.124   3
0.123   3
0.349   3
0.349   3
0.340   3

谢谢你的麻烦


Tags: 字符串答案pandas数字特征字符例子decimal
1条回答
网友
1楼 · 发布于 2024-03-29 01:22:09

使用浮动并不总是容易的,因为^{}。你知道吗

这里可能的解决方案是通过100将多个值转换为整数,然后可能使用^{}获取新序列的大小:

df['a'] = df['col'].map(df['col'].value_counts())
#alternative
#df['a'] = df.groupby('col')['col'].transform('size')

N = 2
s = df['col'].mul(10 ** N).astype(np.int64)
df['b'] = s.groupby(s).transform('size')
print (df)
     col  a  b
0  0.123  2  3
1  0.124  1  3
2  0.123  2  3
3  0.349  2  3
4  0.349  2  3
5  0.340  1  3

就像上面提到的@Fourier一样,如果可能的话,您可以使用(用真实数据进行的最佳测试,有时可能因为浮点精度而失败):

N = 2
df['b'] = df['col'].round(N).groupby(df['col']).transform('size')

相关问题 更多 >