相关疑难解决方法(0)

在 pandas 中进行使用时间插值时是否可以应用时间感知限制?

pandas.DataFrame.interpolate允许通过插入相邻值来填充缺失数据。在它接受的论点中,其中两个似乎与这个问题相关:methodlimit

\n
    \n
  • method:除其他可能的值外,接受"linear""time"。它们之间的区别在于"linear"假设等距行并忽略索引,而"time"插值则考虑索引定义的时间间隔
  • \n
\n
>>> df = pd.DataFrame({'vals': [11, np.nan, np.nan, 12, np.nan, 22]},\n...                   index=pd.to_datetime(['2020-02-02 11:00', '2020-02-02 11:06', '2020-02-02 11:30',\n...                                         '2020-02-02 12:00', '2020-02-02 16:00', '2020-02-02 22:00']))\n>>> df.assign(interp_linear=df.interpolate(method='linear'),\n...           interp_time=df.interpolate(method='time'))\n\n\xef\xbb\xbf                     vals  interp_linear  interp_time\n2020-02-02 11:00:00  11.0      11.000000         11.0\n2020-02-02 11:06:00   NaN      11.333333         11.1\n2020-02-02 11:30:00   NaN      11.666667         11.5\n2020-02-02 12:00:00  12.0      12.000000         12.0\n2020-02-02 16:00:00   NaN      17.000000         16.0\n2020-02-02 22:00:00  22.0      22.000000         22.0\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • limit:允许您根据缺失值的数量限制要使用插值填充的间隙的长度。它需要整数值,并定义为要填充的连续 NaN 的最大数量。虽然这种行为对于本案来说是绝对合理的method="linear",但对于本案来说似乎是有限的 …

python pandas

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

测试DataFrame中的后续值

我有一个带有正负整数的一列的DataFrame。对于每一行,我想查看有多少连续的行(从当前行开始并包括当前行)具有负值。

因此,如果一个序列是2, -1, -3, 1, -1,结果将是0, 2, 1, 0, 1

我可以通过遍历所有索引,使用.iloc拆分列以及next()找出下一个正值在哪里来做到这一点。但是我觉得这并没有利用熊猫的功能,我想还有一种更好的方法。我已经尝试过使用.shift()expanding_window但没有成功。

有没有一种更“泛泛的”方式来找出当前行满足某个逻辑条件之后连续多少行?

这是现在正在工作的内容:

import pandas as pd

df = pd.DataFrame({"a": [2, -1, -3, -1, 1, 1, -1, 1, -1]})

df["b"] = 0
for i in df.index:
    sub = df.iloc[i:].a.tolist()
    df.b.iloc[i] = next((sub.index(n) for n in sub if n >= 0), 1)
Run Code Online (Sandbox Code Playgroud)

编辑:我意识到,当结尾处有多个负值时,即使我自己的示例也不起作用。因此,有必要提供更好的解决方案。

编辑2:我说这个问题在整数的条件,但原本只把1-1我的例子。我通常需要求解正整数和负整数。

python pandas

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

仅在单个NaN时插值

大熊猫有没有办法只插入一个缺失的数据点?也就是说,如果有2个以上连续的NaN,我想让它们独自一人.

所以,举个例子:

s = pd.Series([1, None, 2, 3, None, None, 4.5])
d.interpolate(limit=1)
Run Code Online (Sandbox Code Playgroud)

给我:

[ 1.0, 1.5, 2.0, 3.0, 3.5, NaN, 4.5 ]
Run Code Online (Sandbox Code Playgroud)

但是我想得到

[ 1.0, 1.5, 2.0, 3.0, NaN, NaN, 4.5 ]
Run Code Online (Sandbox Code Playgroud)

如果它有帮助,我有一个索引列表,其中只有一个缺失值.

python numpy scipy pandas

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

标签 统计

pandas ×3

python ×3

numpy ×1

scipy ×1