我有一个3行x 96列数据帧。我试图计算每12个数据点的索引(row1:96)下面两行的平均值。这是我的数据框:
Run 1 Run 2 Run 3 Run 4 Run 5 Run 6 \
0 1461274.92 1458079.44 1456807.1 1459216.08 1458643.24 1457145.19
1 478167.44 479528.72 480316.08 475569.52 472989.01 476054.89
2 ------ ------ ------ ------ ------ ------
Run 7 Run 8 Run 9 Run 10 ... Run 87 \
0 1458117.08 1455184.82 1455768.69 1454738.07 ... 1441822.45
1 473630.89 476282.93 475530.87 474200.22 ... 468525.2
2 ------ ------ ------ ------ ... ------
Run 88 Run 89 Run 90 Run 91 Run 92 Run 93 \
0 1445339.53 1461050.97 1446849.43 1438870.43 1431275.76 1430781.28
1 460076.8 473263.06 455885.07 475245.64 483875.35 487065.25
2 ------ ------ ------ ------ ------ ------
Run 94 Run 95 Run 96
0 1436007.32 1435238.23 1444300.51
1 474328.87 475789.12 458681.11
2 ------ ------ ------
[3 rows x 96 columns]
目前我正在尝试使用df.irow(0)来选择行索引0中的所有数据。
类似于:
selection = np.arange(0,13)
for i in selection:
new_df = pd.DataFrame()
data = df.irow(0)
........
然后我迷路了
我只是不知道如何将此范围与数据框链接,以计算每列中每12个数据点的平均值。
总而言之,我想要每列中每12次运行的平均值。所以,我应该得到一个单独的数据帧,平均值为2 * 8(96/12)。 任何想法?
感谢。
答案 0 :(得分:1)
最好尽可能尝试使用pandas
方法,而不是遍历行。 DataFrame的iloc
方法对于提取任意数量的行非常有用。
以下示例显示如何在双列DataFrame中执行所需操作。相同的技术将独立于列数工作:
In [14]: df = pd.DataFrame({"x": [1, 2, "-"], "y": [3, 4, "-"]})
In [15]: df
Out[15]:
x y
0 1 3
1 2 4
2 - -
In [16]: df.iloc[2] = df.iloc[0:2].sum()
In [17]: df
Out[17]:
x y
0 1 3
1 2 4
2 3 7
但是,在你的情况下,你想要在df.iloc [2]中对每组八个单元格求和,所以你最好简单地用语句
来得到求和表达式的结果。ds = df.iloc[0:2].sum()
与您的数据一起将具有
形式col1 0
col2 1
col3 2
col4 3
...
col93 92
col94 93
col95 94
col96 95
(这些数字具有代表性,您显然会看到您的列数总和)。然后,您可以使用
将其转换为12x8矩阵ds.values.reshape(12, 8)
,其值为
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29, 30, 31],
[32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47],
[48, 49, 50, 51, 52, 53, 54, 55],
[56, 57, 58, 59, 60, 61, 62, 63],
[64, 65, 66, 67, 68, 69, 70, 71],
[72, 73, 74, 75, 76, 77, 78, 79],
[80, 81, 82, 83, 84, 85, 86, 87],
[88, 89, 90, 91, 92, 93, 94, 95]])
但总结这个数组会给你所有元素的总和,所以改为用
创建另一个DataFramers = pd.DataFrame(ds.values.reshape(12, 8))
然后总结一下:
rs.sum()
给
0 528
1 540
2 552
3 564
4 576
5 588
6 600
7 612
dtype: int64
您可能会在实践中发现,首先简单地创建两个12x8矩阵更容易,您可以在创建数据帧之前将它们相加,然后可以求和。很大程度上取决于您如何阅读数据。