

初めまして。初心者ですがよろしくお願いします。  
図の左のようなCSVファイルを読み込んだとします。  
A列は人を表し、B列のa,bは身長、体重を表しています（cは穴埋めなので気にしないでください）。  
C列はB列に対応した数値になっています。  
同じ人がa,bを不規則に測っている通り、いくつものデータを持っている場合、その人の中の最も新しい数値(ここでは行が下に行くほど新しいデータとなる)のみを取り出して、右の図のようなCSVファイルを作りたいのですが、どのように組めば、うまく動くでしょうか？  
説明が上手くできずに申し訳ございません。

追記： 利用者IDは図の列Aに値して、コンテンツIDは列Bに値し、値は列Cに値します。

[code]

    column = data[['利用者ID','コンテンツID','値']]
    
    for i in range(len(column['利用者ID'])):
        if column.iloc[i,1] != 1003 or column.iloc[i,1] != 1004:
            column.drop(i)
    
[/code]

自分で作ったコードはこれです。

[![画像の説明をここに入力](https://i.stack.imgur.com/hsNBM.png)](https://i.stack.imgur.com/hsNBM.png)


CC BY-SA 3.0
2017-12-21T08:55:13.387
40444
2017-12-24T10:05:06.237
2020-06-17T08:14:45.997
-1
26725
question
python pandas
PythonでCSVデータの整理


_回答が付かない上に-1までされていたので、フォローしたいと思います_

ご質問の内容は、つまりこう言うことになります。

> Pandasでデータフレームをグループ化した時、各グループの最後の行を取り出すにはどうしたらいいか？

Pandasのgroupbyは読み込み順を維持します。そして.last()で最後の行を取り出せば目的を達成できると思います。

[code]

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    import pandas as pd
    from io import StringIO
    
    data = '''\
    利用者ID,コンテンツID,値
    1,a,170
    1,b,60
    1,c,0
    1,a,169
    2,c,0
    2,a,157
    2,b,45
    2,a,155
    2,b,46
    2,c,0
    2,a,155
    2,b,45
    3,c,0
    3,a,171
    3,b,65
    3,a,170
    4,c,0
    4,a,158
    4,b,51
    5,a,149
    5,a,150
    5,b,35
    5,c,0
    5,b,35
    5,a,151
    5,c,0
    5,b,38
    '''
    
    with StringIO(data) as csvfile:
        df = pd.read_csv(csvfile)
        summery = df.groupby(['利用者ID', 'コンテンツID']).last()
        # "c"を除外したければ次の通り
        # summery = df.query('コンテンツID != "c"').groupby(['利用者ID', 'コンテンツID']).last()
    print(summery.to_csv())
    
[/code]

# 実行結果

[code]

    利用者ID,コンテンツID,値
    1,a,169
    1,b,60
    1,c,0
    2,a,155
    2,b,45
    2,c,0
    3,a,170
    3,b,65
    3,c,0
    4,a,158
    4,b,51
    4,c,0
    5,a,151
    5,b,38
    5,c,0
    
[/code]


CC BY-SA 3.0
2017-12-24T09:26:12.147
40512
2017-12-24T10:05:06.237
2017-12-24T10:05:06.237
7837
7837
40444
answer