我有一个大的数据框,基本上是一个图像ID和一组生物特征。我必须组合所有ID(GID),结果特征应该是具有相同ID的所有行的串联。
我确实理解该解决方案需要使用group_by
函数并应用我需要连接的行。在这种情况下,我不确定写入的函数参数。
示例数据。
df[['GID','AID','INDIVIDUAL_NAME','NID']].head(10)
GID AID INDIVIDUAL_NAME NID
0 546 16167 ____ -16167
1 546 16168 ____ -16168
2 546 16169 ____ -16169
3 546 16170 ____ -16170
4 5666 13822 IBEIS_PZ_1866 2139
5 5713 9269 NNP_GIRM_0149 253
6 8838 11554 IBEIS_PZ_0373 646
7 1062 9439 NNP_GIRM_0143 234
8 1062 9440 ____ -9440
9 7748 9253 ____ -9253
我需要将结果输出为
GID AID INDIVIDUAL_NAME NID
0 546 16167,16168 ,16169,16170 ____, ____, ____, ____ -16167,-16168 ,-16169,-16170
1 5666 13822 IBEIS_PZ_1866 2139
2 5713 9269 NNP_GIRM_0149 253 frontleft
3 8838 11554 IBEIS_PZ_0373 646
4 1062 9439,9440 NNP_GIRM_0143, ____ 234,-9440
5 7748 9253 ____ -9253
另外,我正在寻找一个很好的教程,他们已经解释了pandas数据框的应用函数。
答案 0 :(得分:2)
您可以先按string
列和groupby
功能GID
投射到join
然后aggregate
:
df['AID'] = df.AID.astype(str)
df['NID'] = df.NID.astype(str)
print (df.groupby('GID').agg(','.join).reset_index())
GID AID INDIVIDUAL_NAME \
0 546 16167,16168,16169,16170 ____,____,____,____
1 1062 9439,9440 NNP_GIRM_0143,____
2 5666 13822 IBEIS_PZ_1866
3 5713 9269 NNP_GIRM_0149
4 7748 9253 ____
5 8838 11554 IBEIS_PZ_0373
NID
0 -16167,-16168,-16169,-16170
1 234,-9440
2 2139
3 253
4 -9253
5 646
编辑:
或者,您可以将astype
与join
:
print (df.groupby('GID').agg(lambda x: ','.join(x.astype(str))).reset_index())
GID AID INDIVIDUAL_NAME \
0 546 16167,16168,16169,16170 ____,____,____,____
1 1062 9439,9440 NNP_GIRM_0143,____
2 5666 13822 IBEIS_PZ_1866
3 5713 9269 NNP_GIRM_0149
4 7748 9253 ____
5 8838 11554 IBEIS_PZ_0373
NID
0 -16167,-16168,-16169,-16170
1 234,-9440
2 2139
3 253
4 -9253
5 646