按列值分组并将其设置为Pandas中的索引

时间:2017-08-07 11:41:06

标签: python pandas dataframe indexing group-by

我有一个如下所示的数据框df1

df1 = pd.DataFrame({'A':[0,5,4,8,9,0,7,6],
                   'B':['a','s','d','f','g','h','j','k'],
                   'C':['XX','XX','XX','YY','YY','WW','ZZ','ZZ']})    

我的目标是根据列C中包含的值对元素进行分组,以便具有相同值的行具有相同的索引(必须包含存储在C中的值)。因此输出应该是这样的:

    A  B   
XX  0  a  
    5  s  
    4  d  
YY  8  f  
    9  g  
WW  0  h  
ZZ  7  j  
    6  k  

我尝试使用命令df.groupby('C'),但它返回以下对象:

<pandas.core.groupby.DataFrameGroupBy object at 0x000000001A9D4860>

你能否建议我以优雅而聪明的方式实现我的目标?

注意:我认为我的问题与多索引

有某种关系

2 个答案:

答案 0 :(得分:3)

您似乎需要DataFrame.set_index

df2 = df1.set_index('C')
print (df2)
    A  B
C       
XX  0  a
XX  5  s
XX  4  d
YY  8  f
YY  9  g
WW  0  h
ZZ  7  j
ZZ  6  k

print (df2.loc['XX'])
    A  B
C       
XX  0  a
XX  5  s
XX  4  d

如果列MultiIndexC需要A

df3 = df1.set_index(['C', 'A'])
print (df3)
      B
C  A   
XX 0  a
   5  s
   4  d
YY 8  f
   9  g
WW 0  h
ZZ 7  j
   6  k

print (df3.loc['XX'])
   B
A   
0  a
5  s
4  d

答案 1 :(得分:2)

我认为你正在寻找payload = { 'username': 'xxxxxx', 'password': 'xxxxxxx' }

with requests.Session() as s:
    p = s.post('https://service.rl360.com/scripts/customer.cgi', data=payload)
# print the html returned to see if it's a successful login page.
print p.text


# An authorised request.
r = s.get('https://service.rl360.com/scripts/customer.cgi/SC/myAccount.php')
print r.text

输出:

      A
C  B   
WW h  0
XX a  0
   d  4
   s  5
YY f  8
   g  9
ZZ j  7
   k  6