gpt4 book ai didi

python - 来自一系列数据框的 Pandas multiindex

转载 作者:行者123 更新时间:2023-11-28 22:45:21 24 4
gpt4 key购买 nike

我有一系列具有相同结构的数据框,代表一年中每个小时的模拟结果。每个模拟都包含一系列坐标 (x,y) 的结果。

每个数据帧都是从一个 csv 文件导入的,该文件仅在文件名中包含时间信息。示例:

results_YYMMDDHH.csv

包含这样的数据

   x   y         a         b
0.0 0.0 0.318705 -0.871259
0.1 0.0 -0.937012 0.704270
0.1 0.1 -0.032225 -1.939544
0.0 0.1 -1.874781 -0.033073

我想创建一个多索引数据帧(0 级是时间,1 级是 (x,y)),它允许我使用重采样在这些数据帧之间执行各种操作,如平均值、求和、最大值等或分组方法。对于每个时间步

生成的数据框应该是这样的

                       x   y         a         b
2010-01-01 10:00 0.0 0.0 0.318705 -0.871259
0.1 0.0 -0.934512 0.745270
0.1 0.1 -0.0334525 -1.963544
0.0 0.1 -1.835781 -0.067573

2010-01-01 11:00 0.0 0.0 0.318705 -0.871259
0.1 0.0 -0.923012 0.745670
0.1 0.1 -0.035225 -1.963544
0.0 0.1 -1.835781 -0.067573
.................
.................
2010-12-01 10:00 0.0 0.0 0.318705 -0.871259
0.1 0.0 -0.923012 0.723270
0.1 0.1 -0.034225 -1.963234
0.0 0.1 -1.835781 -0.067233

您可以想象一年中的每个小时。我现在希望能够计算例如全年的平均值或 6 月的平均值。还有任何其他功能,例如超过某个阈值或介于最小值和最大值之间的小时数。请记住,任何这些操作的结果都应该是一个 DataFrame。例如,每月平均值应该是这样的

              x   y     a     b
2010-01 0.0 0.0 0.45 -0.13
2010-02 0.1 0.0 0.55 -0.87
2010-03 0.1 0.1 0.24 -0.83
2010-04 0.0 0.1 0.11 -0.87

如何构建这个 MultiIndexed 数据框?我把它想象成一个时间序列的数据帧。

最佳答案

我会制作一个面板,然后使用 to_frame() 将其转换为多索引 DataFrame:

In [29]: df1 = pd.DataFrame(dict(a=[0.318705,-0.937012,-0.032225,-1.874781], b=[-0.871259,0.704270,-1.939544,-0.033073]))

In [30]: df2 = pd.DataFrame(dict(a=[0.318705,-0.937012,-0.032225,-1.874781], b=[-0.871259,0.704270,-1.939544,-0.033073]))

In [31]: df1
Out[31]:
a b
0 0.318705 -0.871259
1 -0.937012 0.704270
2 -0.032225 -1.939544
3 -1.874781 -0.033073

In [32]: data = {datetime.datetime(2010,6,21,10,0,0): df1, datetime.datetime(2010,6,22,10,0,0): df2}

In [33]: p = pd.Panel(data)

In [34]: p.to_frame()
Out[34]:
2010-06-21 10:00:00 2010-06-22 10:00:00
major minor
0 a 0.318705 0.318705
b -0.871259 -0.871259
1 a -0.937012 -0.937012
b 0.704270 0.704270
2 a -0.032225 -0.032225
b -1.939544 -1.939544
3 a -1.874781 -1.874781
b -0.033073 -0.033073

根据您希望如何查看数据,您可以使用 swapaxes 重新排列它:

In [35]: p.swapaxes("major", "items").to_frame()
Out[35]:
0 1 2 3
major minor
2010-06-21 10:00:00 a 0.318705 -0.937012 -0.032225 -1.874781
b -0.871259 0.704270 -1.939544 -0.033073
2010-06-22 10:00:00 a 0.318705 -0.937012 -0.032225 -1.874781
b -0.871259 0.704270 -1.939544 -0.033073

关于python - 来自一系列数据框的 Pandas multiindex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28703873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com