【问题标题】:New secondary index based on column value (pandas dataframe)基于列值的新二级索引(熊猫数据框)
【发布时间】:2023-04-02 16:28:01
【问题描述】:

我有一个 Pandas 数据框:

index1 col1 col2
0 12719 row1
1 12719 row2
2 12719 row3
3 12719 row4
4 20000 row1
5 20000 row2
6 20000 row3
7 20000 row4
8 20000 row5

我想根据col1 值的出现(运行次数)创建一个新列index2

index1 index2 col1 col2
0 0 12719 row1
1 1 12719 row2
2 2 12719 row3
3 3 12719 row4
4 0 20000 row1
5 1 20000 row2
6 2 20000 row3
7 3 20000 row4
8 4 20000 row5

我尝试了不同的正则表达式组合,但不适合我的情况。

【问题讨论】:

  • df['index2'] = df.groupby('col1').cumcount()

标签: python pandas


【解决方案1】:

您可以使用GroupBy.cumcount() 生成第二个索引的值,并通过.set_index() 和参数append=True 将其设置为第二个索引。

df['index2'] = df.groupby('col1').cumcount()
df = df.set_index('index2', append=True)

结果:

print(df)

           col1  col2
  index2             
0 0       12719  row1
1 1       12719  row2
2 2       12719  row3
3 3       12719  row4
4 0       20000  row1
5 1       20000  row2
6 2       20000  row3
7 3       20000  row4
8 4       20000  row5

【讨论】:

    【解决方案2】:

    您可以分配索引

    df.index = pd.MultiIndex.from_arrays([df.index,df.groupby('col1').cumcount()])
    df
    Out[77]: 
               col1  col2
    index1               
    0      0  12719  row1
    1      1  12719  row2
    2      2  12719  row3
    3      3  12719  row4
    4      0  20000  row1
    5      1  20000  row2
    6      2  20000  row3
    7      3  20000  row4
    8      4  20000  row5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2022-09-29
      • 2013-12-04
      • 1970-01-01
      • 2017-12-12
      • 2018-07-15
      • 1970-01-01
      相关资源
      最近更新 更多