首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python熊猫初学者:多维数据分析工作流(groupby+agg+plot)

python熊猫初学者:多维数据分析工作流(groupby+agg+plot)
EN

Stack Overflow用户
提问于 2013-11-08 15:24:24
回答 1查看 2.4K关注 0票数 7

我刚开始接触熊猫,试着学习如何处理多维数据。

我的数据

假设我的数据是'A','B','C','D','E','F','G‘列的大CSV。这个数据描述了一些模拟结果,其中'A','B',…,'F‘是模拟参数,'G’是输出之一(本例中只有现有的输出!)。

编辑/更新:,正如Boud在评论中所建议的,让我们生成一些与我的数据兼容的数据:

代码语言:javascript
复制
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‘是随机种子),所以我的代码变成:

代码语言:javascript
复制
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

我现在想做什么?

  • I:显示每个场景的所有(唯一)值--这些组中的参数-> grouped_agg为我提供了一个元组的可迭代性,例如,在每个位置0处的所有条目都给出了'A‘的所有值(因此,使用几行python,我将得到我的唯一值,但可能有一个函数)

代码语言:javascript
复制
- **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]`

  • II:生成一些图(低维的) ->,我需要使一些变量常量并过滤/选择我的数据,然后再绘制(因此需要步骤一) =>

代码语言:javascript
复制
- '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,被认为是树冠)

萨沙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-18 15:01:21

I:如果我理解你的例子和期望的输出,我就不明白为什么分组是必要的。

代码语言:javascript
复制
data.A.unique()

二:更新..。

我将实现上面所描述的示例。假设我们在随机种子('F')上平均了'G‘,如下所示:

代码语言:javascript
复制
data = data.groupby(['A','B','C','D','E']).agg(({'G' : np.mean})).reset_index()

从选择B、C和E具有指定的常量值的行开始。

代码语言:javascript
复制
df1 = data[(data['B'] == const1) & (data['C'] == const2) & (data['E'] == const3)]

现在我们想用'D‘的函数来绘制'G’,对'A‘的每一个值都有不同的颜色。

代码语言:javascript
复制
df1.set_index('D').groupby('A')['G'].plot(legend=True)

我在一些虚拟数据上测试了上面的内容,它的工作原理与您所描述的一样。与每个'A‘对应的'G’的范围是在同一轴上以不同的颜色绘制的。

我不知道怎么回答那个宽泛的问题。

不,我认为这对你来说不是问题。

我建议玩更简单、更小的数据集,并对熊猫更加熟悉。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19862570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档