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
。现在,它是按索引分组的,每一行有不同的值。