Python 合并具有重复列值的行

Python 合并具有重复列值的行,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个数据框,如下所示: data 0 a 1 a 2 a 3 a 4 a 5 b 6 b 7 b 8 b 9 b data 0 a a

我有一个数据框,如下所示:

              data
    0          a
    1          a
    2          a
    3          a
    4          a 
    5          b
    6          b
    7          b
    8          b
    9          b
         data
   0      a
          a
          a
          a
          a
    1     b
          b
          b
          b
          b
我希望将a和b的重复值分组到单个行元素中,如下所示:

              data
    0          a
    1          a
    2          a
    3          a
    4          a 
    5          b
    6          b
    7          b
    8          b
    9          b
         data
   0      a
          a
          a
          a
          a
    1     b
          b
          b
          b
          b
我该怎么做呢?我尝试了以下方法,但它将每个重复值放在自己的列中

     df.groupby('data') 

看起来像是一个
pivot
问题,但由于缺少列(按
cumcount
创建)和索引(按
factorize
创建)列,因此很难确定

pd.crosstab(pd.factorize(df.data)[0],df.groupby('data').cumcount(),df.data,aggfunc='sum')
Out[358]: 
col_0  0  1  2  3  4
row_0               
0      a  a  a  a  a
1      b  b  b  b  b

看起来像是一个
pivot
问题,但由于缺少列(按
cumcount
创建)和索引(按
factorize
创建)列,因此很难确定

pd.crosstab(pd.factorize(df.data)[0],df.groupby('data').cumcount(),df.data,aggfunc='sum')
Out[358]: 
col_0  0  1  2  3  4
row_0               
0      a  a  a  a  a
1      b  b  b  b  b
差不多

index = ((df['data'] != df['data'].shift()).cumsum() - 1).rename(columns= {'data':''})

df = df.set_index(index)

    data
0   a
0   a
0   a
0   a
0   a
1   b
1   b
1   b
1   b
1   b

类似于

index = ((df['data'] != df['data'].shift()).cumsum() - 1).rename(columns= {'data':''})

df = df.set_index(index)

    data
0   a
0   a
0   a
0   a
0   a
1   b
1   b
1   b
1   b
1   b

您可以使用
pd.factorize
后跟
set\u index

df = df.assign(key=pd.factorize(df['data'], sort=False)[0]).set_index('key')

print(df)

    data
key     
0      a
0      a
0      a
0      a
0      a
1      b
1      b
1      b
1      b
1      b

您可以使用
pd.factorize
后跟
set\u index

df = df.assign(key=pd.factorize(df['data'], sort=False)[0]).set_index('key')

print(df)

    data
key     
0      a
0      a
0      a
0      a
0      a
1      b
1      b
1      b
1      b
1      b

我真的不明白你在问什么,你在第二行仍然有同样多的行,看起来你只是想更改索引?如果我理解正确,看起来你需要使用
filter
np定义一个新列。其中
将“a”设置为0,将“b”设置为1,然后在该列上使用
groupby
。现在,它是按索引分组的,每一行有不同的值。我真的不明白你在问什么,第二行仍然有同样多的行,看起来你只是想更改索引?如果我理解正确,看起来您需要使用
filter
np定义一个新列。其中
将“a”设置为0,将“b”设置为1,然后在该列上使用
groupby
。现在,它是按索引分组的,每一行有不同的值。