在pandas中添加多个列

时间:2017-03-22 21:26:51

标签: python pandas aggregate grouping

刚刚熟悉大熊猫,我遇到了groupby的问题。

我有一些CSV数据,我已经采用以下格式:

Time, AAA, BBB, AAA, BBB 20161201 9:00:00, 10, 20, 11, 21 20161201 9:00:01, 10, 20, 11, 21 20161201 9:00:02, 10, 20, 11, 21

我想将其转换为以下内容:

Time, AAA, BBB 20161201 9:00:00, 21, 41 20161201 9:00:01, 21, 41 20161201 9:00:02, 21, 41

我正在使用以下内容:

df.groupby(df.columns, axis=1).sum()

我得到的是:

AAA, BBB, Time 21, 41, 0.0 21, 41, 0.0 21, 41, 0.0

  1. 如何防止pandas汇总时间列?我尝试了以下方法:

    df.groupby([c for c in df.columns if c != "Time"], axis=1).sum()

    但是会出错:

    Grouper for 'AAA' not 1-dimensional

  2. 如何避免pandas移动时间列?

  3. 如果重要,我将两个pandas DataFrames合并在一起,使用以下方法获取上述数据:

    df = pd.merge(df1, df2, how="outer")
    

    然后重命名一些列以缩短名称,以便我可以对它们进行分组。

2 个答案:

答案 0 :(得分:3)

df.set_index('Time').groupby(axis=1, level=0).sum().reset_index()

               Time  AAA  BBB
0  20161201 9:00:00   21   41
1  20161201 9:00:01   21   41
2  20161201 9:00:02   21   41

答案 1 :(得分:2)

您可以将Time设置为索引:

df.set_index("Time").pipe(lambda x: x.groupby(x.columns, axis=1).sum())

enter image description here

如果您希望它成为结果中的列,请稍后致电reset_index