如何使用 pandas multiindex 将不同的数组设置为数据帧的次要索引
How to set different arrays as minor index for dataframe with pandas multiindex
两个问题:
1) 是否可以创建具有不同 "minor" 索引的 MultiIndex Pandas DataFrame 例如:
Col1 Col2
0
a 0.1 0.01
b 0.2 0.02
c 0.3 0.03
1
m 0.8 0.00
n 0.9 0.01
v 0.7 0.10
当使用 Pandas MultiIndex 时,我只能设法为所有主要索引设置相同的次要索引。我想知道是否有一种方法可以将长度相同的不同数组指定为次要索引?
2) 假设次要索引(a、b、c、m、n、v)是浮点数。有没有办法使用 pandas mean 方法来平均这些值?到目前为止,我只能对未指定为索引的数据进行平均。
谢谢!
是的,是的。
创建多级索引数据:
array = list(zip([0]*3,list('abc')))+list(zip([1]*5,list('vwxyz')))
array
输出:
[(0, 'a'),
(0, 'b'),
(0, 'c'),
(1, 'v'),
(1, 'w'),
(1, 'x'),
(1, 'y'),
(1, 'z')]
使用pd.MutliIndex创建索引并创建数据框:
idx = pd.MultiIndex.from_tuples(array,names=['one','two'])
df = pd.DataFrame({'Col1':np.random.random(8),'Col2':np.random.random(8)*10},index=idx)
print(df)
输出:
Col1 Col2
one two
0 a 0.747933 3.191390
b 0.020055 1.726661
c 0.342344 5.595333
1 v 0.298349 5.136354
w 0.445190 3.952943
x 0.921896 7.905128
y 0.782851 0.132475
z 0.259996 9.938946
总体均值:
df.mean()
输出:
Col1 0.477327
Col2 4.697404
dtype: float64
意思是 'one':
print(df.groupby(level=0).mean())
输出:
Col1 Col2
one
0 0.370111 3.504461
1 0.541656 5.413169
两个问题:
1) 是否可以创建具有不同 "minor" 索引的 MultiIndex Pandas DataFrame 例如:
Col1 Col2
0
a 0.1 0.01
b 0.2 0.02
c 0.3 0.03
1
m 0.8 0.00
n 0.9 0.01
v 0.7 0.10
当使用 Pandas MultiIndex 时,我只能设法为所有主要索引设置相同的次要索引。我想知道是否有一种方法可以将长度相同的不同数组指定为次要索引?
2) 假设次要索引(a、b、c、m、n、v)是浮点数。有没有办法使用 pandas mean 方法来平均这些值?到目前为止,我只能对未指定为索引的数据进行平均。
谢谢!
是的,是的。
创建多级索引数据:
array = list(zip([0]*3,list('abc')))+list(zip([1]*5,list('vwxyz')))
array
输出:
[(0, 'a'),
(0, 'b'),
(0, 'c'),
(1, 'v'),
(1, 'w'),
(1, 'x'),
(1, 'y'),
(1, 'z')]
使用pd.MutliIndex创建索引并创建数据框:
idx = pd.MultiIndex.from_tuples(array,names=['one','two'])
df = pd.DataFrame({'Col1':np.random.random(8),'Col2':np.random.random(8)*10},index=idx)
print(df)
输出:
Col1 Col2
one two
0 a 0.747933 3.191390
b 0.020055 1.726661
c 0.342344 5.595333
1 v 0.298349 5.136354
w 0.445190 3.952943
x 0.921896 7.905128
y 0.782851 0.132475
z 0.259996 9.938946
总体均值:
df.mean()
输出:
Col1 0.477327
Col2 4.697404
dtype: float64
意思是 'one':
print(df.groupby(level=0).mean())
输出:
Col1 Col2
one
0 0.370111 3.504461
1 0.541656 5.413169