将列添加到Pandas DataFrame的末尾,其中包含以前数据的平均值

Lin*_*nnK 12 python calculated-columns dataframe pandas

我有一个ave_data包含以下内容的DataFrame :

ave_data

Time        F7           F8            F9  
00:00:00    43.005593    -56.509746    25.271271  
01:00:00    55.114918    -59.173852    31.849262  
02:00:00    63.990762    -64.699492    52.426017
Run Code Online (Sandbox Code Playgroud)

我想在此数据框中添加另一列,其中包含每行的F7,F8和F9列下的平均值.

ave_data我的代码不同的Excel文件中读取数据帧后可能会改变大小,所以该方法需要是通用的(即加总是包含平均在数据帧的最后一列列,不列号4)

desired output

Time        F7           F8            F9           Average
00:00:00    43.005593    -56.509746    25.271271    4.25  
01:00:00    55.114918    -59.173852    31.849262    9.26
02:00:00    63.990762    -64.699492    52.426017    17.24
Run Code Online (Sandbox Code Playgroud)

EdC*_*ica 14

您可以使用df的副本,copy()然后调用mean并传递参数axis=1,numeric_only=True以便按行计算均值并忽略非数字列,当您执行以下操作时,总是在末尾添加列:

In [68]:

summary_ave_data = df.copy()
summary_ave_data['average'] = summary_ave_data.mean(numeric_only=True, axis=1)
summary_ave_data
Out[68]:
                 Time         F7         F8         F9    average
0 2015-07-29 00:00:00  43.005593 -56.509746  25.271271   3.922373
1 2015-07-29 01:00:00  55.114918 -59.173852  31.849262   9.263443
2 2015-07-29 02:00:00  63.990762 -64.699492  52.426017  17.239096
Run Code Online (Sandbox Code Playgroud)


kt-*_*t-0 13

@LaangeHaare 或其他任何好奇的人,我只是对其进行了测试,已接受答案的副本部分似乎没有必要(也许我遗漏了一些东西...)

所以你可以简化这个:

df['average'] = df.mean(numeric_only=True, axis=1)
Run Code Online (Sandbox Code Playgroud)

我会简单地将其添加为评论,但没有声誉

  • 仅当您想要执行更多操作时才需要复制部分,例如以一种或多种格式保存到文件并打印,同时避免覆盖旧变量(无论如何这是一个很好的做法),所以从这个意义上说它是一个更一般的答案,而你的答案更重要。 (2认同)

Ser*_*sev 7

通常情况下,如果您想使用特定的列,您可以使用:

df['average'] = df[['F7','F8']].mean(axis=1)
Run Code Online (Sandbox Code Playgroud)

其中axis=1 代表rowwise action(使用每一行的列值来计算'average'列中的平均值)

那么您可能希望按此列排序:

df.sort_values(by='average',ascending=False, inplace=True)
Run Code Online (Sandbox Code Playgroud)

其中 inplace=True 代表对数据帧应用操作而不是对副本进行计算。