我刚开始接触熊猫,试着学习如何处理多维数据。
我的数据
假设我的数据是'A','B','C','D','E','F','G‘列的大CSV。这个数据描述了一些模拟结果,其中'A','B',…,'F‘是模拟参数,'G’是输出之一(本例中只有现有的输出!)。
编辑/更新:,正如Boud在评论中所建议的,让我们生成一些与我的数据兼容的数据:
import pandas as pd
import itertools
import numpy as np
npData = np.zeros(5000, dtype=[('A','i4'),('B','f4'),('C','i4'), ('D', 'i4'), ('E', 'f4'), ('F', 'i4'), ('G', 'f4')])
A = [0,1,2,3,6] # param A: int
B = [1000.0, 10.000] # param B: float
C = [100,150,200,250,300] # param C: int
D = [10,15,20,25,30] # param D: int
E = [0.1, 0.3] # param E: float
F = [0,1,2,3,4,5,6,7,8,9] # param F = random-seed = int -> 10 runs per scenario
# some beta-distribution parameters for randomizing the results in column "G"
aDistParams = [ (6,1),
(5,2),
(4,3),
(3,4),
(2,5),
(1,6),
(1,7) ]
counter = 0
for i in itertools.product(A,B,C,D,E,F):
npData[counter]['A'] = i[0]
npData[counter]['B'] = i[1]
npData[counter]['C'] = i[2]
npData[counter]['D'] = i[3]
npData[counter]['E'] = i[4]
npData[counter]['F'] = i[5]
np.random.seed = i[5]
npData[counter]['G'] = np.random.beta(a=aDistParams[i[0]][0], b=aDistParams[i[0]][1])
counter += 1
data = pd.DataFrame(npData)
data = data.reindex(np.random.permutation(data.index)) # shuffle rows because my original data doesn't give any guarantees因为参数'A','B',…,'F‘是作为笛卡尔乘积生成的(意思是:嵌套的for -循环;先验的),所以在分析输出之前,我想使用groupby来获取每个可能的’模拟场景‘。
参数'F‘描述每个场景的多次运行(由'A’、'B‘、.、'E’定义的每个场景,假设'F‘是随机种子),所以我的代码变成:
grouped = data.groupby(['A','B','C','D','E'])
# -> every group defines one simulation scenario
grouped_agg = grouped.agg(({'G' : np.mean}))
# -> the mean of the simulation output in 'G' over 'F' is calculated for each group/scenario我现在想做什么?
- **Update: my approach**
- `list(set(grouped_agg.index.get_level_values('A')))` (when interested in 'A'; using set for obtaining unique values; probably not the stuff you want to do, if you need high performance)
- => `[0, 1, 2, 3, 6]`
- 'B' const
- 'C', const
- 'E' const
- 'D' = x-axis
- 'G' = y-axis / output from my aggregation
- 'A' = one more dimension = multiple colors within 2d-plot -> one G/y-axis for each value of 'A',我怎么会生成这样的情节?
我认为,重塑我的数据是关键的一步,熊猫的绘图能力将处理它。也许可以实现一个形状,其中有5个列(参数A的每个值一个)和对应的每个索引的G值-选择+param选择就足够了,但我还未能实现这种形式。
谢谢你的意见!
(我用的是熊猫0.12,被认为是树冠)
萨沙
发布于 2013-11-18 15:01:21
I:如果我理解你的例子和期望的输出,我就不明白为什么分组是必要的。
data.A.unique()二:更新..。
我将实现上面所描述的示例。假设我们在随机种子('F')上平均了'G‘,如下所示:
data = data.groupby(['A','B','C','D','E']).agg(({'G' : np.mean})).reset_index()从选择B、C和E具有指定的常量值的行开始。
df1 = data[(data['B'] == const1) & (data['C'] == const2) & (data['E'] == const3)]现在我们想用'D‘的函数来绘制'G’,对'A‘的每一个值都有不同的颜色。
df1.set_index('D').groupby('A')['G'].plot(legend=True)我在一些虚拟数据上测试了上面的内容,它的工作原理与您所描述的一样。与每个'A‘对应的'G’的范围是在同一轴上以不同的颜色绘制的。
我不知道怎么回答那个宽泛的问题。
不,我认为这对你来说不是问题。
我建议玩更简单、更小的数据集,并对熊猫更加熟悉。
https://stackoverflow.com/questions/19862570
复制相似问题