我从这样的输入数据开始
df1 = pandas.DataFrame( {
"Name" : ["Alice", "Bob", "Mallory", "Mallory", "Bob" , "Mallory"] ,
"City" : ["Seattle", "Seattle", "Portland", "Seattle", "Seattle", "Portland"] } )
Run Code Online (Sandbox Code Playgroud)
打印时显示如下:
City Name
0 Seattle Alice
1 Seattle Bob
2 Portland Mallory
3 Seattle Mallory
4 Seattle Bob
5 Portland Mallory
Run Code Online (Sandbox Code Playgroud)
分组很简单:
g1 = df1.groupby( [ "Name", "City"] ).count()
Run Code Online (Sandbox Code Playgroud)
和打印产生一个GroupBy对象:
City Name
Name City
Alice Seattle 1 1
Bob Seattle 2 2
Mallory Portland 2 2
Seattle 1 1
Run Code Online (Sandbox Code Playgroud)
但我最终想要的是另一个包含GroupBy对象中所有行的DataFrame对象.换句话说,我希望得到以下结果:
City Name
Name …Run Code Online (Sandbox Code Playgroud) 我有一个包含2个索引级别的数据框:
value
Trial measurement
1 0 13
1 3
2 4
2 0 NaN
1 12
3 0 34
Run Code Online (Sandbox Code Playgroud)
我想转变成这个:
Trial measurement value
1 0 13
1 1 3
1 2 4
2 0 NaN
2 1 12
3 0 34
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能做到最好?
我需要这个,因为我想按照这里的指示聚合数据,但如果它们被用作索引,我就无法选择我的列.
该(x, y)API已经日益普及,多年来,然而,没有关于它的一切是完全理解在结构方面,工作和相关的操作.
一个重要的操作是过滤.过滤是一种常见的要求,但用例是多种多样的.因此,某些方法和功能将比其他用例更适用于某些用例.
总之,本文的目的是触及一些常见的过滤问题和用例,演示解决这些问题的各种不同方法,并讨论它们的适用性.本文试图解决的一些高级问题是
这些问题已分解为6个具体问题,如下所列.为简单起见,以下设置中的示例DataFrame仅具有两个级别,并且没有重复的索引键.提出问题的大多数解决方案可以推广到N级.
本文不会介绍如何创建MultiIndexes,如何对它们执行赋值操作,或任何与性能相关的讨论(这些是另一个时间的单独主题).
问题1-6将在上下文中询问下面的设置.
Run Code Online (Sandbox Code Playgroud)mux = pd.MultiIndex.from_arrays([ list('aaaabbbbbccddddd'), list('tuvwtuvwtuvwtuvw') ], names=['one', 'two']) df = pd.DataFrame({'col': np.arange(len(mux))}, mux) col one two a t 0 u 1 v 2 w 3 b t 4 u 5 v 6 w 7 t 8 c u 9 v 10 d w 11 t 12 u 13 v 14 w 15
问题1:选择单个项目
如何在"1"级中选择"a"的行?
col
one two
a t 0 …Run Code Online (Sandbox Code Playgroud) 我有一个带有"A"和"B"列的多索引数据框.
是否有一种方法可以通过过滤多索引的一列来选择行,而无需将索引重置为单列索引.
例如.
# has multi-index (A,B)
df
#can I do this? I know this doesn't work because the index is multi-index so I need to specify a tuple
df.ix[df.A ==1]
Run Code Online (Sandbox Code Playgroud) 我在pandas df中有一个包含多索引列的数据集,我希望按特定列中的值进行排序.我尝试过使用sortindex和sortlevel但是无法得到我想要的结果.我的数据集看起来像:
Group1 Group2
A B C A B C
1 1 0 3 2 5 7
2 5 6 9 1 0 0
3 7 0 2 0 3 5
Run Code Online (Sandbox Code Playgroud)
我想按照降序排列组1中C列的所有数据和索引,所以我的结果如下:
Group1 Group2
A B C A B C
2 5 6 9 1 0 0
1 1 0 3 2 5 7
3 7 0 2 0 3 5
Run Code Online (Sandbox Code Playgroud)
是否可以使用我的数据所在的结构进行此类排序,还是应该将Group1交换到索引端?
在表演之后groupby.sum(),DataFrame我在尝试制作我想要的情节时遇到了一些麻烦.

如何kind='bar'为每个创建一个子图()Code,其中x轴是Month和,条是ColA和ColB?
我想在multiindex列数据帧的第二级添加一列.
In [151]: df
Out[151]:
first bar baz
second one two one two
A 0.487880 -0.487661 -1.030176 0.100813
B 0.267913 1.918923 0.132791 0.178503
C 1.550526 -0.312235 -1.177689 -0.081596
Run Code Online (Sandbox Code Playgroud)
通常的直接分配技巧不起作用:
In [152]: df['bar']['three'] = [0, 1, 2]
In [153]: df
Out[153]:
first bar baz
second one two one two
A 0.487880 -0.487661 -1.030176 0.100813
B 0.267913 1.918923 0.132791 0.178503
C 1.550526 -0.312235 -1.177689 -0.081596
Run Code Online (Sandbox Code Playgroud)
如何将第三行添加到"bar"下?
代码示例:
In [171]: A = np.array([1.1, 1.1, 3.3, 3.3, 5.5, 6.6])
In [172]: B = np.array([111, 222, 222, 333, 333, 777])
In [173]: C = randint(10, 99, 6)
In [174]: df = pd.DataFrame(zip(A, B, C), columns=['A', 'B', 'C'])
In [175]: df.set_index(['A', 'B'], inplace=True)
In [176]: df
Out[176]:
C
A B
1.1 111 20
222 31
3.3 222 24
333 65
5.5 333 22
6.6 777 74
Run Code Online (Sandbox Code Playgroud)
现在,我想要检索A值:
Q1:在范围[3.3,6.6]中 - 预期返回值:[3.3,5.5,6.6]或[3.3,3.3,5.5,6.6],如果是最后一个,则[3.3,5.5 ]或[3.3,3.3,5.5],如果没有.
Q2:在[2.0,4.0]范围内 - 预期回报值:[3.3]或[3.3,3.3]
对于任何其他MultiIndex维度也是如此,例如B值:
Q3 …
例如,我有:
In [1]: df = pd.DataFrame([8, 9],
index=pd.MultiIndex.from_tuples([(1, 1, 1),
(1, 3, 2)]),
columns=['A'])
In [2] df
Out[2]:
A
1 1 1 8
3 2 9
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法从索引中删除最后一个级别:
In [3]: pd.DataFrame(df.values,
index=df.index.droplevel(2),
columns=df.columns)
Out[3]:
A
1 1 8
3 9
Run Code Online (Sandbox Code Playgroud) 我有以下pd.DataFrame:
Name 0 1 ...
Col A B A B ...
0 0.409511 -0.537108 -0.355529 0.212134 ...
1 -0.332276 -1.087013 0.083684 0.529002 ...
2 1.138159 -0.327212 0.570834 2.337718 ...
Run Code Online (Sandbox Code Playgroud)
它具有MultiIndex列names=['Name', 'Col']和层次级别.该Name标签从0到n,并为每个标签,有两个A和B列.
我想要选择此DataFrame的所有A(或B)列.
multi-index ×10
pandas ×10
python ×8
dataframe ×5
slice ×2
flatten ×1
hierarchical ×1
indexing ×1
matplotlib ×1
sorting ×1