小编jer*_*ear的帖子

四舍五入序列中的值时,decimal.InvalidOperation错误

我正在使用的系列:

import pandas as pd
from decimal import Decimal, BasicContext

df = pd.Series([14978.22,
16025.429160000002,
209.97803999999996,
618.20369,
605.607,
1431.0916,
30.53575,
23.77272,
404.79368999999997,
55580.152319999994
])
df2 = df.apply(str).apply(Decimal, context=BasicContext)
Run Code Online (Sandbox Code Playgroud)

我想使用“ ROUND_HALF_UP”将df中的所有值四舍五入(这是用于BasicContext的舍入)。因此,我这样做:

df2.apply(round, ndigits=5)
Run Code Online (Sandbox Code Playgroud)

但是,这将引发错误:

追溯(最近一次通话):

df2.apply中第1行的文件“”(舍入,ndigits = 5)

文件“ C:\ Users \ Guest \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ core \ series.py”,行3194,在apply apply = lib.map_infer(值,f,convert = convert_dtype)

在pandas._libs.lib.map_infer中的文件“ pandas / _libs / src \ inference.pyx”,行1472

文件“ C:\ Users \ Guest \ AppData \ Roaming \ …

python floating-point decimal rounding pandas

6
推荐指数
1
解决办法
880
查看次数

带有线性插值的 Numpy 百分位数 - 错误的值?

百分位数的线性插值公式为:

线性:i + (j - i) * 分数,其中分数是被 i 和 j 包围的索引的小数部分。

假设我有这个包含 16 个观察值的列表:

test = [0, 1, 5, 5, 5, 6, 6, 7, 7, 8, 11, 12, 21, 23, 23, 24]
Run Code Online (Sandbox Code Playgroud)

我将它作为一个 numpy 数组传递并使用线性插值计算第 85 个百分位数。

np_test = np.asarray(test)
np.percentile(np_test, 85, interpolation = 'linear')
Run Code Online (Sandbox Code Playgroud)

我得到的结果是22.5。但是,我不认为这是正确的。第 85 个百分位的指数是 0.85 * 16 = 13.6。因此,小数部分是 0.6。第 13 个值是 21,所以 i = 21。第 14 个值是 23,所以 j = 23。然后线性公式应该产生:

21 + (23 - 21) * .6 = 21 + 2 …

python numpy percentile linear-interpolation

5
推荐指数
1
解决办法
4121
查看次数

Pandas 将多个组融合为单列

原始数据帧:

+----+----------+----------+----------+----------+
| ID |  var1hrs |  var2hrs |  ind1var |  ind2var |
+----+----------+----------+----------+----------+
|  1 |       55 |       45 |      123 |      456 |
|  2 |       48 |       60 |      331 |      222 |
+----+----------+----------+----------+----------+
Run Code Online (Sandbox Code Playgroud)

目标数据帧:

+----+------------+------+------+
| ID |    type    |  hrs |  ind |
+----+------------+------+------+
|  1 |  primary   |   55 |  123 |
|  1 |  secondary |   45 |  456 |
|  2 |  primary   |   48 |  331 |
|  2 |  secondary …
Run Code Online (Sandbox Code Playgroud)

python transpose dataframe melt pandas

2
推荐指数
1
解决办法
1122
查看次数

取消隐藏数据框并加入pandas

我有这个数据帧:

+-------+-----+---------+
| group | id  |  value  |
+-------+-----+---------+
| A     |  92 | 123.123 |
| A     | 105 |    9034 |
| A     | 999 |     421 |
| B     |  92 |   32019 |
| B     | 105 |    3281 |
+-------+-----+---------+
Run Code Online (Sandbox Code Playgroud)

我想转动'group'列,使其值成为'value'列名称的一部分,观察结果由'id'连接,如下所示:

+-----+---------+---------+
| id  | A_value | B_value |
+-----+---------+---------+
|  92 | 123.123 | 32019   |
| 105 |    9034 | 3281    |
| 999 |     421 | nan     |
+-----+---------+---------+
Run Code Online (Sandbox Code Playgroud)

这样做的最佳方法是什么?

python pivot join dataframe pandas

2
推荐指数
1
解决办法
48
查看次数

清洁基于多个条件创建列的方法

我的问题很简单 - 我有下表:

+----------+-------+------------+--------+
| industry | class | occupation | value  |
+----------+-------+------------+--------+
|      170 |     4 |       1000 |  123.3 |
|      180 |     7 |       3600 | 4543.8 |
|      570 |     5 |        990 |  657.4 |
+----------+-------+------------+--------+
Run Code Online (Sandbox Code Playgroud)

我想创建一个名为"type"的新列.此列的值基于这些多个条件

  • 等级= 7:QWE
  • 等级= 8:ASD
  • Class = 1或2:ZXC
  • Class = 4,5或6 AND Industry = 170-490或570-690 AND Occupation> = 1000:IOP
  • 等级= 4,5或6和行业= 170-490或570-690并且占用10-3540之间:JKL
  • 其他:BNM

结果表将如下所示:

+----------+-------+------------+--------+------+
| industry | class | occupation | value  | type |
+----------+-------+------------+--------+------+
| …
Run Code Online (Sandbox Code Playgroud)

python numpy dataframe pandas

1
推荐指数
1
解决办法
61
查看次数