【问题标题】:Pandas How to use a column value as an index to another rowPandas 如何使用列值作为另一行的索引
【发布时间】:2022-11-26 16:21:41
【问题描述】:

我有以下代码行


df["high_int"] = df.Slope  * (df.index - df.max_idx) + df,loc['max_idx', 'High]

max_idx 包含一段时间内最高点的索引,例如:15 或 30。

I have tried .loc, .iloc, .at, .iat .get, .shift(), as well as df['max_idx'].map(df['High'])

大多数错误似乎与使用系列而不是 int(在 .iloc 的情况下)或类似错误有关。在我看来,这应该是一项微不足道的任务。我错过了一些明显的东西吗?

提前致谢

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    最后一部分没有意义,df.loc[index, columns] 采用索引过滤器、列或列列表,而不是 2 列。另一件事 - 假设你想写 df[["max_id", "High"]] - 它也会失败,因为你不能以这种方式将 2 列强制合并为一列。

    将以下内容作为您可以做什么和不能做什么的示例:

    >>> df =pd.DataFrame({"Slope": [1,3,2, -5, -23.3], "max_id": [1,1,1,2,2], "High": [3,4,4,4,3]})
    >>> df["high_int"] = df.Slope * (df.index - df.max_id)
    >>> df
       Slope  max_id  High  high_int
    0    1.0       1     3      -1.0
    1    3.0       1     4       0.0
    2    2.0       1     4       2.0
    3   -5.0       2     4      -5.0
    4  -23.3       2     3     -46.6
    
    >>> df["high_int"] = df.Slope * (df.index - df.max_id) + df[["max_id", "High"]]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/9skibi2/miniconda3/envs/airflow2/lib/python3.9/site-packages/pandas/core/frame.py", line 3967, in __setitem__
        self._set_item_frame_value(key, value)
      File "/home/9skibi2/miniconda3/envs/airflow2/lib/python3.9/site-packages/pandas/core/frame.py", line 4097, in _set_item_frame_value
        raise ValueError("Columns must be same length as key")
    ValueError: Columns must be same length as key
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-29
      • 2021-09-11
      • 2022-11-12
      • 2022-07-12
      • 2020-01-11
      • 1970-01-01
      • 2022-06-30
      • 1970-01-01
      相关资源
      最近更新 更多