Pandas 通过连接subid值和其他列名,从分组行展开/创建列
我希望通过基于列进行分组并将子索引(在另一列中)与其他两个列名连接,从panda dataframe创建新的列。这最好用一个例子来说明。假设这是我的输入数据帧:Pandas 通过连接subid值和其他列名,从分组行展开/创建列,pandas,join,pandas-groupby,Pandas,Join,Pandas Groupby,我希望通过基于列进行分组并将子索引(在另一列中)与其他两个列名连接,从panda dataframe创建新的列。这最好用一个例子来说明。假设这是我的输入数据帧: filename sub_id x y 0 2019-07-29T16-01-33.jpg 0 731 343 1 2019-07-29T16-01-33.jpg 1 741 283 2 2019-07-29T16-01-34.jp
filename sub_id x y
0 2019-07-29T16-01-33.jpg 0 731 343
1 2019-07-29T16-01-33.jpg 1 741 283
2 2019-07-29T16-01-34.jpg 0 734 407
3 2019-07-29T16-01-34.jpg 1 757 348
4 2019-07-29T16-01-35.jpg 0 741 293
5 2019-07-29T16-01-35.jpg 1 760 380
我想得到这个:
filename x0 y0 x1 y1
0 2019-07-29T16-01-33.jpg 731 343 741 283
1 2019-07-29T16-01-34.jpg 734 407 757 348
2 2019-07-29T16-01-35.jpg 741 293 760 380
将sub_id
值(0或1)附加到x
和y
列名中,以创建新列和相应传输的相应坐标值
我假设我必须以某种方式使用groupby或Join,但不确定如何使用。还有另一种方法:
# create the columns for x0, x1, y0, y1
df_unstacked= df.set_index(['filename', 'sub_id']).unstack(-1)
# rename the column
df_unstacked.columns= [''.join(map(str, c_tup)) for c_tup in df_unstacked.columns]
结果是
x0 x1 y0 y1
filename
2019-07-29T16-01-33.jpg 731 741 343 283
2019-07-29T16-01-34.jpg 734 757 407 348
2019-07-29T16-01-35.jpg 741 760 293 380
还有一种方法:
# create the columns for x0, x1, y0, y1
df_unstacked= df.set_index(['filename', 'sub_id']).unstack(-1)
# rename the column
df_unstacked.columns= [''.join(map(str, c_tup)) for c_tup in df_unstacked.columns]
结果是
x0 x1 y0 y1
filename
2019-07-29T16-01-33.jpg 731 741 343 283
2019-07-29T16-01-34.jpg 734 757 407 348
2019-07-29T16-01-35.jpg 741 760 293 380
这比我的好。如果您想匹配OP输出
df,您也可以进行排序。set_index(['filename',sub_id'])。unstack(-1)。排序_值('sub_id',axis=1)
:)+1为什么要删除您的?我的看起来很笨拙,您的要好得多。:)谢谢你的回答和帮助。一般来说,pivot
解决方案通常更优雅,因为您不必手动设置索引。如果您可以找到一种方法来避免melt
我想这会更容易理解(如果源数据帧很大,那么melt可能会消耗额外的资源)。这比我的要好。如果您想匹配OP输出df,您也可以进行排序。set_index(['filename',sub_id'])。unstack(-1)。排序_值('sub_id',axis=1)
:)+1为什么要删除您的?我的看起来很笨拙,您的要好得多。:)谢谢你的回答和帮助。一般来说,pivot
解决方案通常更优雅,因为您不必手动设置索引。如果您能够找到一种避免melt
的方法,我想这会更容易理解(如果源数据帧很大,那么melt可能会消耗额外的资源)。