如何在python

时间:2019-11-06 08:54:14

标签: python pandas

我的问题与使用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

谢谢你的麻烦

1 个答案:

答案 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')