在Pandas的数据框中,基于列标签对数据进行分组

3
我一直在阅读有关pandas数据框中分层索引和多层索引的内容,但似乎这些都是针对有序标签的。例如,我的数据如下所示:
并且我想根据列标签将数据分组,即将第3行中所有带有“d”的列聚合在一起求平均值。
最好的方法是将这个Excel数据(或如果绝对需要,CSV)转换为数据框,以便我可以执行这些操作,我该如何做呢?
任何建议或参考资料都将不胜感激。
编辑:
我尝试使用以下命令从CSV加载数据:
data = pd.read_csv('Dataset.csv', index_col=0, header=[0,1,2,3], parse_dates=True)

当加载时,它会给我这个:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 18 entries, 2013-05-27 10:31:00 to 2013-07-24 11:31:00
Data columns (total 40 columns):
(1, mix, d, n)     18  non-null values
(2, aq, s, n)      18  non-null values
(3, gr, s, n)      18  non-null values
(4, mix, d, n)     18  non-null values
(5, aq, d, n)      17  non-null values

我真的不确定接下来该做什么。


你在哪里读取数据?Excel文件还是CSV?如果是的话,请查看Python中的CSV模块。 - oz123
我更倾向于从Excel读取,但是我也尝试将其转换为CSV文件,然后将标头设置为我想要分组的行,但是我不知道该怎么做。我会添加一个编辑来展示我的意思。 - pbreach
你是否尝试过使用像10分钟教程中所展示的data['3']这样的方法? - oz123
我刚刚观看了视频,似乎不起作用,它只是给了我一个键错误。 - pbreach
你能否发布一下你尝试过的代码和出现的错误?(也许还可以将数据本身作为原始文本而不是图像发布) - joris
我认为你的键是'(3, gr, s, n)',但我不是pandas用户,无法确定。 - oz123
1个回答

4
您可以使用按列分组(axis=1groupby 并取mean
In [11]: df = pd.DataFrame(np.random.randn(4, 3), columns=[[1, 2, 3], ['d', 's', 'd']])

In [12]: df.columns.names = ['PLOT', 'DEPTH']

In [13]: df
Out[13]:
PLOT          1         2         3
DEPTH         d         s         d
0     -0.557490 -1.231495 -0.333703
1      0.513394  1.046577  0.596306
2     -0.404606 -1.615080 -0.694562
3     -0.078497 -0.683405  0.056857

In [14]: df.groupby(level='DEPTH', axis=1).mean()
Out[14]:
DEPTH         d         s
0     -0.445596 -1.231495
1      0.554850  1.046577
2     -0.549584 -1.615080
3     -0.010820 -0.683405

这正是我想做的!我之前尝试过类似的方法,但并不正确。谢谢! - pbreach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接