Python 将dataframe的行与同一组合并,并将值分配给新列
我想将dataframe的行与同一组组合起来,并将值分配给新列 以前Python 将dataframe的行与同一组合并,并将值分配给新列,python,python-3.x,pandas,pandas-groupby,Python,Python 3.x,Pandas,Pandas Groupby,我想将dataframe的行与同一组组合起来,并将值分配给新列 以前 x y group 0 0.333333 1.000000 0 1 0.750000 0.137931 0 2 1.000000 0.270115 0 3 0.272727 1.000000 1 4 0.727273 0.124294 1 5 1.000000 0.355932 1 6
x y group
0 0.333333 1.000000 0
1 0.750000 0.137931 0
2 1.000000 0.270115 0
3 0.272727 1.000000 1
4 0.727273 0.124294 1
5 1.000000 0.355932 1
6 0.272727 1.000000 2
7 0.727273 0.096591 2
8 1.000000 0.363636 2
9 0.272727 1.000000 3
10 0.727273 0.105556 3
11 1.000000 0.416667 3
12 0.272727 1.000000 4
13 0.727273 0.181818 4
14 1.000000 0.443182 4
之后
以下是透视表的一种方法:
# rank of the row within each group
cats = df.groupby('group').group.rank('first').astype(int)
# use pivot_table to transform data
new_df = pd.pivot_table(df, index='group', columns=cats)
# rename to get desired columns
new_df.columns = [f'{x}{y}' for x,y in new_df.columns]
输出:
x1 x2 x3 y1 y2 y3
group
0 0.333333 0.750000 1.0 1.0 0.137931 0.270115
1 0.272727 0.727273 1.0 1.0 0.124294 0.355932
2 0.272727 0.727273 1.0 1.0 0.096591 0.363636
3 0.272727 0.727273 1.0 1.0 0.105556 0.416667
4 0.272727 0.727273 1.0 1.0 0.181818 0.443182
您可以使用groupby和pivot函数来完成它,如
df=pd.DataFrame([('0','0.333333','1.000000','0'),('1','0.750000','0.137931','0'),('2','1.000000','0.270115','0'),('3','0.2727','1.000000','1'),('4','0.727273','0.124294','1'),('5','1.000000','0.355932','1'),('6','0.2727227','1.000000 2','2'),('7','0.72727273','0.368',',('9','0.272727','1.000000','3'),('10','0.727273','0.105556','3'),('11','1.000000','0.416667','3'),('12','0.272727','1.000000','4'),('13','0.727273','0.181818','4'),('14','1.000000','0.443182','4'),列=('id','x','y','group'))
df2=df.groupby(“集团”)\
.apply(lambda组:group.assign(ind=np.arange(len(group)))\
.reset_索引(drop=True)
df2=df2.pivot(index=“ind”,columns=“group”,value=[“x”,“y”])
df2.columns=list(映射(lambda x:“”.join(x),df2.columns))
df2
不使用透视表:
groups=df.groupby('group')['group'].apply(lambda x: x.eq(x.shift()).cumsum())
new_df=pd.concat([df.groupby(groups)['x','y'].get_group(key).add_suffix(str(key+1)).reset_index(drop=True) for key in groups.unique()],axis=1)
print(new_df)
x1 y1 x2 y2 x3 y3
0 0.333333 1.0 0.750000 0.137931 1.0 0.270115
1 0.272727 1.0 0.727273 0.124294 1.0 0.355932
2 0.272727 1.0 0.727273 0.096591 1.0 0.363636
3 0.272727 1.0 0.727273 0.105556 1.0 0.416667
4 0.272727 1.0 0.727273 0.181818 1.0 0.443182
小组总是分成3行吗?检查Q10和Q11
groups=df.groupby('group')['group'].apply(lambda x: x.eq(x.shift()).cumsum())
new_df=pd.concat([df.groupby(groups)['x','y'].get_group(key).add_suffix(str(key+1)).reset_index(drop=True) for key in groups.unique()],axis=1)
print(new_df)
x1 y1 x2 y2 x3 y3
0 0.333333 1.0 0.750000 0.137931 1.0 0.270115
1 0.272727 1.0 0.727273 0.124294 1.0 0.355932
2 0.272727 1.0 0.727273 0.096591 1.0 0.363636
3 0.272727 1.0 0.727273 0.105556 1.0 0.416667
4 0.272727 1.0 0.727273 0.181818 1.0 0.443182