按列索引从多个数据框中添加数据

时间:2020-11-09 15:07:49

标签: python pandas dataframe

我有多个与此相似的数据框:

date                   val1     val2     val3    val4
2020-11-06 10:00:00     0.5      1.0      1.1     1.2
2020-11-06 11:00:00     1.5      1.3      0.1     1.3
2020-11-06 12:00:00     4.5      1.2      2.1     5.2

date                   val1     val2     val3    val4
2020-11-06 10:00:00     1.5      2.0      2.1     2.2
2020-11-06 11:00:00     2.5      2.3      1.1     2.3
2020-11-06 12:00:00     5.5      2.2      3.1     6.2

那么一些日期,然后是一些值。在每个数据框中,日期都是相同的,这使日期成为ID。我想做的只是添加所有按日期索引的数据框的值。因此,在上面的示例中,结果数据帧应为:

date                   val1     val2     val3    val4
2020-11-06 10:00:00     2.0      3.0      3.2     3.4
2020-11-06 11:00:00     4.0      3.6      1.2     3.6
2020-11-06 12:00:00    10.0      3.4      5.2    11.4

4 个答案:

答案 0 :(得分:3)

您只需要设置索引并添加数据框:

+------+--------+----------+
|  id  |  name  |  amount  | 
+------+--------+----------+
|  1   |  josh  |  250     |
|  2   |  jane  |  200     |
|  3   |  john  |  250     |
----------------------------

然后,如果您不希望out = df1.set_index("date") + df2.set_index("date") print(out) val1 val2 val3 val4 date 2020-11-06 10:00:00 2.0 3.0 3.2 3.4 2020-11-06 11:00:00 4.0 3.6 1.2 3.6 2020-11-06 12:00:00 10.0 3.4 5.2 11.4 成为官方"date",则只需致电index

.reset_index()

另一种方法是将内置的out = out.reset_index() print(out) date val1 val2 val3 val4 0 2020-11-06 10:00:00 2.0 3.0 3.2 3.4 1 2020-11-06 11:00:00 4.0 3.6 1.2 3.6 2 2020-11-06 12:00:00 10.0 3.4 5.2 11.4 与生成器表达式一起使用,这样您就无需在每个sum上显式设置index

DataFrame

答案 1 :(得分:0)

您可以简单地添加两个数据框!

我建议您先将索引设置为日期,然后将值转换为浮点数(如果尚未将其转换为

private static Quaternion rotationBetweenTwoVectors(Vector3 vec1, Vector3 vec2)
{
    Quaternion result = Pools.obtain(Quaternion.class);
    Vector3 u = Pools.obtain(Vector3.class).set(vec1).nor();
    Vector3 v = Pools.obtain(Vector3.class).set(vec2).nor();
    float dot = u.dot(v);

    if(dot < -0.999999)
    {
        Vector3 tmp1 = Pools.obtain(Vector3.class).set(Vector3.X).crs(u);
        if(tmp1.len() < 0.000001)
        {
            tmp1.set(Vector3.Y).crs(u);
        }
        tmp1.nor();
        result.setFromAxisRad(tmp1, MathUtils.PI).nor();
        Pools.free(tmp1);
    }
    else if(dot > 0.999999)
    {
        result.idt();
    }
    else
    {
        result.setFromCross(u, v);
    }
    Pools.free(u);
    Pools.free(v);

    return result;
}

答案 2 :(得分:0)

您可以将df.appenddatedf.groupby上的df.sum一起使用:

In [1266]: df1.append(df2).groupby('date').sum()
Out[1266]: 
                      val1  val2  val3  val4
               date                            
2020-11-06 10:00:00   2.0   3.0   3.2   3.4
2020-11-06 11:00:00   4.0   3.6   1.2   3.6
2020-11-06 12:00:00  10.0   3.4   5.2  11.4

或者简单地:

In [1267]: df1.set_index('date') + df2.set_index('date')
Out[1267]: 
                               val1  val2  val3  val4
                        date  
2020-11-06  10:00:0010:00:00   2.0   3.0   3.2   3.4
2020-11-06  11:00:0011:00:00   4.0   3.6   1.2   3.6
2020-11-06  12:00:0012:00:00  10.0   3.4   5.2  11.4

答案 3 :(得分:0)

您可以添加两个数据帧和.set_index

(df1+df2).set_index('date')