向pandas DataFrame中添加一个具有列平均值的行

ztyzrc3y  于 2023-03-28  发布在  其他
关注(0)|答案(2)|浏览(314)

我有一个pandas DataFrame,其中包含一些随时间变化的传感器读数,如下所示:

diode1  diode2  diode3  diode4
Time
0.530       7       0      10      16
1.218      17       7      14      19
1.895      13       8      16      17
2.570       8       2      16      17
3.240      14       8      17      19
3.910      13       6      17      18
4.594      13       5      16      19
5.265       9       0      12      16
5.948      12       3      16      17
6.632      10       2      15      17

我编写了代码来添加另一行,其中包含每列的平均值:

# List of the averages for the test. 
averages = [df[key].describe()['mean'] for key in df]
indexes = df.index.tolist()
indexes.append('mean')
df.reindex(indexes)
# Adding the mean row to the bottom of the DataFrame

i = 0
for key in df:
    df.set_value('mean', key, averages[i])
    i += 1

这给了我想要的结果,这是一个像这样的DataFrame:

diode1  diode2  diode3  diode4
Time
0.53      7.0     0.0    10.0    16.0
1.218    17.0     7.0    14.0    19.0
1.895    13.0     8.0    16.0    17.0
2.57      8.0     2.0    16.0    17.0
3.24     14.0     8.0    17.0    19.0
3.91     13.0     6.0    17.0    18.0
4.594    13.0     5.0    16.0    19.0
5.265     9.0     0.0    12.0    16.0
5.948    12.0     3.0    16.0    17.0
6.632    10.0     2.0    15.0    17.0
mean     11.6     4.1    14.9    17.5

然而,我确信这不是添加行的最有效的方法。我尝试使用append,并将平均值保存为pandas Series,但没有产生预期的输出。我想知道是否有更有效的方法将索引为'mean'的行和每列的平均值添加到pandas DataFrame的底部。

68de4m5k

68de4m5k1#

使用loc进行放大设置:

df.loc['mean'] = df.mean()

结果输出:

diode1  diode2  diode3  diode4
Time                                 
0.53      7.0     0.0    10.0    16.0
1.218    17.0     7.0    14.0    19.0
1.895    13.0     8.0    16.0    17.0
2.57      8.0     2.0    16.0    17.0
3.24     14.0     8.0    17.0    19.0
3.91     13.0     6.0    17.0    18.0
4.594    13.0     5.0    16.0    19.0
5.265     9.0     0.0    12.0    16.0
5.948    12.0     3.0    16.0    17.0
6.632    10.0     2.0    15.0    17.0
mean     11.6     4.1    14.9    17.5
qyyhg6bp

qyyhg6bp2#

对于单个统计量,loc非常有效。另一种方法是使用concat

df1 = pd.concat([df, df.apply(['mean'])])

如果需要附加多个统计信息,则该选项特别有用:

df1 = pd.concat([df, df.apply(['mean', 'sum', 'median'])])

要附加一大堆统计信息,如stdmedianmean等(OP已经计算过),concat再次有用:

df1 = pd.concat([df, df.describe()])

相关问题