【问题标题】:Group by column value and set it as index in Pandas按列值分组并将其设置为 Pandas 中的索引
【发布时间】:2018-01-14 17:02:19
【问题描述】:

我有一个数据框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>

你能建议我一种优雅而聪明的方式来实现我的目标吗?

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

【问题讨论】:

  • 你的意思是df1.set_index('C')
  • 它很相似,但不适合我的问题,因为它会为每个元素分配和索引,而我想做的却不同......我想有一个索引来访问数据框

标签: python pandas dataframe indexing group-by


【解决方案1】:

看来你需要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

如果需要来自CA 列的MultiIndex

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

【讨论】:

    【解决方案2】:

    我认为您正在寻找 pivot_table

    pd.pivot_table(df1, values='A', index=['C','B'])
    

    输出:

    一种 乙 0 XX 一 0 d 4 5 YY f 8 克 9 ZZ j 7 ķ 6

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多