【问题标题】:how to create a new column in a dataframe using a loop in python如何使用python中的循环在数据框中创建新列
【发布时间】:2019-03-16 01:47:17
【问题描述】:

我想使用循环创建一个名为 snapavg 的新变量。

对于每个名称,我想创建一个循环:

  • 如果 week =1,我想将平均值返回为 TouchSnapPercentage

  • 如果第 2 周,我想返回平均值为第 1 周的 TouchSnapPercentage + 第 2 周的平均值除以 2

  • 如果周 =3,除以 3 以此类推。

到目前为止,我尝试过的任何方法都不起作用。

【问题讨论】:

    标签: python pandas loops for-loop


    【解决方案1】:

    测试数据

    df = pd.DataFrame(
    {
        'date': [1, 2, 3, 1, 2, 3],
        'user': ['a', 'a', 'a', 'b', 'b', 'b'],
        'value': [1, 2, 3, 2, 4, 6]
    }
    

    得到结果:

    df.apply(lambda x: np.sum([df[(df.user == x.user) & (df.date == each)].iloc[0].value for each in range(1, x.date + 1)]) / x.date
         , axis=1)
    

    如果您缺少数据(有一周的数据但没有前一周的数据):

    df.apply(
        lambda x: np.sum(
            [df[(df.user == x.user) & (df.date == each)].iloc[0].value
             if df[(df.user == x.user) & (df.date == each)].shape[0] is not 0 else 0
             for each in range(1, x.date + 1)]) / x.date, axis=1)
    

    你可能想把它重写为函数,这段代码的可读性很差。

    【讨论】:

    • TypeError:“系列”对象不能解释为整数。我相信这个问题可能源于 for I in range。谢谢!
    • nvm,我猜 range 不支持这样的操作,应该使用 apply 代替
    • IndexError:('单个位置索引器超出范围','发生在索引 138')。数据框有 138 行长,所以这可能是问题所在。
    • 可能是由于 .iloc[0]
    • 你有每周每个名字的所有数据吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多