当前位置: 首页 > 知识库问答 >
问题:

动态访问pandas dataf rame子集,执行计算并写入新的数据帧

巫马自明
2023-03-14
df_test = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),
                    columns=['a', 'b', 'c', 'd', 'e'])
df_test
    a   b   c   d   e
0   1   9   0   3   0
1   5   4   1   0   3
2   9   3   6   3   5
3   6   2   5   9   7
4   9   0   7   9   5
df_1
    a   b   c   d   e
0   1   9   0   3   0
1   5   4   1   0   3
2   9   3   6   3   5

df_2 
    a   b   c   d   e
1   5   4   1   0   3
2   9   3   6   3   5
3   6   2   5   9   7

df_3 
    a   b   c   d   e
2   9   3   6   3   5
3   6   2   5   9   7
4   9   0   7   9   5
result
    a   b   c   d   e
0   5   5.3 2.3 3   2.7
1   6.7 3   4   4   5
2   8   1.7 6   7   5.3

我怎么能那样做?

共有1个答案

韦叶秋
2023-03-14

使用rolling并通过ilocdropna删除第一个nan行:

N = 3
df = df.rolling(N).mean().iloc[N-1:]
df = df.rolling(3).mean().dropna(how='all')

print (df)
          a         b         c    d         e
2  5.000000  5.333333  2.333333  2.0  2.666667
3  6.666667  3.000000  4.000000  4.0  5.000000
4  8.000000  1.666667  6.000000  7.0  5.666667

如果还需要mean第一行、第一行+第二行,则添加参数min_periosts:

df1 = df.rolling(3, min_periods=1).mean()
print (df1)
          a         b         c    d         e
0  1.000000  9.000000  0.000000  3.0  0.000000
1  3.000000  6.500000  0.500000  1.5  1.500000
2  5.000000  5.333333  2.333333  2.0  2.666667
3  6.666667  3.000000  4.000000  4.0  5.000000
4  8.000000  1.666667  6.000000  7.0  5.666667

编辑:

dfs = []
N = 3
for x in np.arange(len(df)+1)[N:]:
    df1 = df.iloc[np.arange(x - N, x)]
    #print (df1)
    s = df1.mean().to_frame().T
    #print (s)
    dfs.append(s)

df2 = pd.concat(dfs, ignore_index=True)
print (df2)
          a         b         c    d         e
0  5.000000  5.333333  2.333333  2.0  2.666667
1  6.666667  3.000000  4.000000  4.0  5.000000
2  8.000000  1.666667  6.000000  7.0  5.666667
 类似资料:
  • MXNet后端会自动构建计算图。通过计算图,系统可以知道所有计算的依赖关系,并可以选择将没有依赖关系的多个任务并行执行来获得计算性能的提升。例如“异步计算”一节的第一个例子里依次执行了a = nd.ones((1, 2))和b = nd.ones((1, 2))。这两步计算之间并没有依赖关系,因此系统可以选择并行执行它们。 通常,一个运算符会用到所有CPU或单块GPU上全部的计算资源。例如,dot

  • 我正在为动态编程编写一些复习材料。我需要提出如何划分子问题,计算出基本情况,并提出递归公式。 给定 n 个正整数 a1,a2,...,an、一个数字 k 和一个目标 W,我们希望选择一个子集 T,其总和恰好是 k 个元素,其总和最接近 W。每个元素只能选择一次。定义一个具有 3 个参数的子问题(即 C[x,y,z] = ...)。 我只处理过几个动态编程示例,从未处理过定义子问题时需要3个参数的示

  • 有什么方法可以通过计算/执行字符串来动态检查和设置AnyLogic中代理的参数吗? 我的案子: 我有编号为0到200的停车场,命名为parkingLot0、parkingLot1、...、parkingLot200(每个容量为1)。 我有一个名为DetachedTrailer的代理。 我想为到达的分离拖车找到一个空的停车位,并设置代理。停到那个停车场。 我不想一个接一个地手动执行此操作,而是希望有

  • 问题内容: 我想为每一行计算最大列子集,并将其添加为现有列的新列。 我以非常尴尬的方式做到了这一点: 该功能的工作原理是: 返回: 我认为,如果可以使用带有的用户定义函数,则可以更简单地完成。但是我不知道该怎么做。如果您有更简单的方法来实现这一目标,请告诉我。我正在使用Spark 1.6 问题答案: 让我们从几个导入开始 接下来定义负无穷大字面量: 映射列并将结果传递给: 最后: 结果: 您可以将

  • 问题内容: 我想测试某个代码段执行的SQL查询越少越好。 似乎有其自己的方法,它将做到这一点。但是由于我没有修补ActiveRecord,所以对我来说没什么用。 RSpec或ActiveRecord是否提供任何官方的公开方式来计算在代码块中执行的SQL查询的数量? 问题答案: 我认为您通过提及回答了您自己的问题,但是这里有: 我建议您看一下后面的代码,并使用它来构建自己的方法,该方法可用于计算查询

  • 我还没反应过来。我试图从REST APIendpoint发出GET请求,该endpoint应返回以下JSON: 要查询API,我使用以下代码: 我想创建一个函数,返回JSON中的注释列表。我最初的尝试如下: 但是,它给了我一个错误。从网上看,似乎大多数人的问题都可以通过将默认值设置为空字典来解决,但我已经在React钩子中这样做了。我很困惑为什么要发帖子。注释列表未定义。我还注意到,试图使用控制台