我的问题与使用python或pandas计算小数点后的位数有关。到目前为止回答的问题首先将float转换为string,然后计算小数点后的字符数。在将十进制转换为str()时,尾随的零会丢失。但就我而言,我需要计算小数点后的位数,包括尾随零(如果存在)。也就是说,对于数字7.80,答案应为小数点后两位而不是一位,当然,对于7.8,答案应为十进制后一位。请让我知道是否可行。
实际上我的问题是这样的: 假设我有一个熊猫系列,内容如下:
0.123
0.124
0.123
0.349
0.349
0.340
我想生成两个特征。现有数据的一个简单的value_counts()。 因此答案将是:
0.123 2
0.124 1
0.123 2
0.349 2
0.349 2
0.340 1
另一个特征生成将是除去最后一位后的value_counts()。新功能将是:
0.123 3
0.124 3
0.123 3
0.349 3
0.349 3
0.340 3
谢谢你的麻烦
答案 0 :(得分:2)
使用浮点数并不总是那么容易,因为precision
。
这里可能的解决方案是将100
的多个值转换为整数,然后可以使用GroupBy.transform
来获取新系列的大小:
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')