【问题标题】:pandas unique values how to iterate as a starting pointpandas 独特的价值观如何以迭代为起点
【发布时间】:2018-12-07 19:09:28
【问题描述】:

早安,(糟糕的初学者)

我有以下熊猫数据框:

我的目标是在第一次出现新 ID 时,让 VALUE COLUMN 为该行的 1000* DELTA。对于该 ID 的所有连续行,VALUE 是上一行的 VALUE * 当前行的 DELTA。

我尝试获取所有唯一 ID 值:

a=stocks2.ID.unique()
a.tolist()

它有效,不幸的是我真的不知道如何以我描述的方式进行迭代。任何形式的帮助或提示将不胜感激!

【问题讨论】:

    标签: python pandas numpy stock


    【解决方案1】:

    一种方法如下。示例数据框:

    df = pd.DataFrame({'ID':[1,1,5,3,3], 'delta':[0.3,0.5,0.2,2,4]}).assign(value=[2,5,4,2,3])
    print(df)
       ID  delta   value
    0   1    0.3     2
    1   1    0.5     5
    2   5    0.2     4
    3   3    2.0     2
    4   3    4.0     3
    

    从上面的行中填写value

    df['value'] = df.shift(1).delta * df.shift(1).value
    

    Groupby 获取第一个 ID 出现的索引:

    w = df.groupby('ID', as_index=False).nth(0).index.values
    

    并使用w 中的索引计算value 的值:

    df.loc[w,'value'] = df.loc[w,'delta'] * 1000 
    

    这给出了这个例子:

     ID  delta   value
    0   1    0.3   300.0
    1   1    0.5     0.6
    2   5    0.2   200.0
    3   3    2.0  2000.0
    4   3    4.0     4.0
    

    【讨论】:

    • 首先,非常感谢!只有最后一部分我认为我没有正确描述。第二行值..第一个 ID 的第 n 行值始终是 delta 乘以上面值的行值。
    • 已编辑,如果它符合您的要求,请告诉我
    • 问题是我认为的顺序。我想以 1000* 开始每个 ID ...然后每个后续都基于最后一个..所以我必须首先设置唯一值
    • 无论如何,请记住接受答案,这样我就知道它有帮助
    • 非常感谢。如果你知道任何地方我也许可以读到它。高度赞赏
    猜你喜欢
    • 2021-09-07
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    相关资源
    最近更新 更多