Python 如何按熊猫中的层次列进行分组?
我有一个带有层次列索引的数据帧。现在我想按列Python 如何按熊猫中的层次列进行分组?,python,pandas,indexing,Python,Pandas,Indexing,我有一个带有层次列索引的数据帧。现在我想按列['X','chromosome']对它进行分组。有没有一种不改变数据帧结构的方法 import pandas as pd X = pd.DataFrame.from_dict( {'chromosome':['chr1', 'chr2', 'chr2', 'chr2'],'start':[1,2,1,4]}) Y = pd.DataFrame.from_dict( {'chromosome':['chr1', 'chr2', 'chr2', 'c
['X','chromosome']
对它进行分组。有没有一种不改变数据帧结构的方法
import pandas as pd
X = pd.DataFrame.from_dict( {'chromosome':['chr1', 'chr2', 'chr2', 'chr2'],'start':[1,2,1,4]})
Y = pd.DataFrame.from_dict( {'chromosome':['chr1', 'chr2', 'chr2', 'chr3'],'start':[4,5,6,1]})
df_stats = pd.DataFrame.from_dict( {'pvalue':[ 1e-30, 1e-3, 1e-10, 1e-40],'t-stat':[4.4,5.5,6.6, 7.7]})
dd = {'X': X, 'Y': Y, 'STATS':df_stats}
df_qtls = pd.concat(dd.values(), axis = 1, keys= list(dd.keys()) )
df_qtls
for n, g in df_qtls.groupby(['X', 'chromosome'], axis=0):
print(n, g)
导致错误:
...
ValueError: Grouper for 'X' not 1-dimensional
对于多级列,使用
('X','chromosome')
访问特定列
for n, g in df_qtls.groupby([('X', 'chromosome')]):
print(n)
print(g)
chr1
Y X STATS
chromosome start chromosome start pvalue t-stat
0 chr1 4 chr1 1 1.0000e-30 4.4
chr2
Y X STATS
chromosome start chromosome start pvalue t-stat
1 chr2 5 chr2 2 1.0000e-03 5.5
2 chr2 6 chr2 1 1.0000e-10 6.6
3 chr3 1 chr2 4 1.0000e-40 7.7
我发现的另一个方法是:
for n, g in df_qtls.groupby(df_qtls[x_pos_cols, 'chromosome'], axis=0):
print(n)
print(g)
请注意,出于某种原因,列名必须位于大小为1的列表中。e、 g.
groupby(('X',染色体'))
不起作用,而groupby([('X',染色体')])
起作用。