【问题标题】:Drag down formula in python在python中向下拖动公式
【发布时间】:2021-01-14 18:59:35
【问题描述】:

有没有办法为每个水果计算 True 后 5 年的(乘数 x 值)?为了清楚起见,此处显示了公式

df   

fruit   year     value     Criteria        multiplier        multiplier x value
apple   1950      2
apple   1951      3
apple   1952      3
apple   1953      4
apple   1954      5
apple   1955      4       True           1.4                        (=1.4*4)
apple   1956      7                                                 (=1.4*7)
..
apple   2000      8                                                 (=1.4*8)

banana  1950     333                                                
banana  1951     335 

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    您可以使用df[df['Criteria'] == True].index 查找所有True 行的索引。 现在您可以使用相应的乘数填充后续行,如下所示:

    for i in df[df['Criteria'] == True].index:
      df.loc[i:i+4, 'multiplier'] = df.loc[i]['multiplier']
    

    最后将结果写入multiplier x value 列,如下所示:

    df['multiplier x value'] = df['multiplier'] * df['value']
    

    这假设您所有的 emtpy 乘数单元格都填充有 None0

    如果每个水果都需要这个,请使用 groupby 拆分 DataFrame 并在每个子帧上运行循环:

    result = pd.DataFrame()
    for subframe in [x for _, x in df.groupby('fruit')]:
      for i in subframe[subframe['Criteria'] == True].index:
        subframe.loc[i:i+4, 'multiplier'] = subframe.loc[i]['multiplier']
      result = pd.concat([result, subframe])
    
    result['multiplier x value'] = result['multiplier'] * result['value']
    

    【讨论】:

    • 谢谢!您介意解释一下for subframe in [x for _, x in df.groupby('fruit') 的含义吗?我了解 groupby,但之前不了解。
    • @asd: groupby 返回组名和组数据的元组,所以会发生名称分配给_(即不需要并且将被丢弃)和数据分配给x 并用作列表,由外部for 循环迭代。您可以print(subframe)查看内容。
    • 进一步阅读iterating through groups
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    相关资源
    最近更新 更多