我正在使用的系列:
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 \ …
百分位数的线性插值公式为:
线性: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 …
原始数据帧:
+----+----------+----------+----------+----------+
| 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) 我有这个数据帧:
+-------+-----+---------+
| 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)
这样做的最佳方法是什么?
我的问题很简单 - 我有下表:
+----------+-------+------------+--------+
| 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"的新列.此列的值基于这些多个条件
结果表将如下所示:
+----------+-------+------------+--------+------+
| industry | class | occupation | value | type |
+----------+-------+------------+--------+------+
| …Run Code Online (Sandbox Code Playgroud)