DataFreamで複数の列が同じ場合に異なる列を操作groupbyとagg

2926 ワード

参考[python:ドキュメントの重複する行をマージする方法]
最近のデータプリプロセッシングではdataFreamに同じ列が複数あるのに1列または複数の列が異なることに遭遇し,同じ列が1行を特定できるように同じ列に基づいて異なる列をマージしようとしたが,最後にgoupbyパケットを用いてagg関数とlambdaを用いてこの問題を解決できることが分かったので,以下を記録する.具体的な質問は次のとおりです.
vt_count=data.groupby(['vid','table_id'],as_index=False).count()

vt_count[vt_count['field_results']>1].head()
'''
    vid table_id  field_results
1    000330ad1f424114719b7525f400660b     0102              3
147  000381f0069cbf7537e6aac8923034ae     0102              3
250  0003848ebd8d8163603760d53d975693     0101              3
251  0003848ebd8d8163603760d53d975693     0102              6
331  0003848ebd8d8163603760d53d975693     1308              2
'''
data[np.logical_and(data['vid']=='000330ad1f424114719b7525f400660b',data['table_id']=='0102')]
'''
    vid table_id             field_results
1439773  000330ad1f424114719b7525f400660b     0102          (       )       
1439811  000330ad1f424114719b7525f400660b     0102     :       、            
1439816  000330ad1f424114719b7525f400660b     0102       、 、 、 、  、         
'''
##    ,       vid,   table_id       

だからvidとtable_に基づいてid同じ行を結合してfield_resultsは、groupyとaggを使用して、参考文献に示されている解決策を探しました.具体的な操作は以下の通りです.
data=pd.concat([data1,data2])
data.to_csv("data.csv",index=False)
data=pd.read_csv("data.csv",header=None)
'''
data.head()
                                  0         1              2
0                              vid  table_id  field_results
1  002d1e4859fafd9ded2a2e1e7c839b62      2403           72.9
2  002d1e4859fafd9ded2a2e1e7c839b62      2404          166.5
3  002d1e4859fafd9ded2a2e1e7c839b62      2405          26.30
4  002d1e4859fafd9ded2a2e1e7c839b62      2420             79
'''
data=data.astype(str)
grouped = data.groupby([0,1])
result = grouped.agg(lambda x:'|'.join(x))

結果:
result.to_csv('result1.csv')
result=pd.read_csv('result1.csv')

result.columns=['vid','table_id','field_results']
'''
result.head()
                                vid table_id  \
0  000330ad1f424114719b7525f400660b     0101   
1  000330ad1f424114719b7525f400660b     0102   
2  000330ad1f424114719b7525f400660b     0113   
3  000330ad1f424114719b7525f400660b     0114   
4  000330ad1f424114719b7525f400660b     0115   

                                       field_results  
0             ,    ,      ,    ,        。CDFI:   ...  
1       (       )       |   :       、            ...  
2                         、    ,    ,         ,    。  
3                          、    ,    ,      ,      。  
4                          、    ,    ,      ,      。 

わずか数行でfield_resultsは同じ列をつなぎ合わせることによって、ここでは簡単な記録しかしません.具体的なagg関数とlambda式の使い方は、この2つの使い方を具体的に紹介する文章を参照することができます.