41879

[code]

    df1 = pd.DataFrame({'Text1' : ["Jack","Mary","Marco","Iabel"],
                    'Text2' : ["Male","Female",25,"Female"],
                    'Text3' : ["USA","Canada","Italy",175],
                    'Text4' : [20,"game","designer",24],
                    'Text5' : ["musician",24,"fashion","shopping"],
                    'Text6' : ["rock","unemployed","tennis","actress"],
                    'Text7' : ["movie","None","None","None"]})
    
[/code]

df1の出力結果

[code]

        Text1   Text2   Text3   Text4     Text5     Text6       Text7
    0   Jack    Male    USA     20        musician  rock        movie
    1   Mary    Female  Canada  game      24        unemployed  None
    2   Marco   25      Italy   designer  fashion   tennis      None
    3   Iabel   Female  175     24        shopping  actress     None
    
[/code]

また、

[code]

    df2 = pd.DataFrame([["USA", 0],
                       ["France",1],
                       ["Italy",1],
                       ["Canada", 2]])
    df2.columns = {"Country", "Code"}
    
[/code]

df2の出力結果

[code]

        Country  Code
    0   USA      0
    1   France   1
    2   Italy    1
    3   Canada   2
    
[/code]

という二つのデータフレームがあります。  
df1の各行において、df2のCounrtryという列に入っている国名のどれかと一致すればその国名を取り出し、最終的に

[code]

          0      1
    0   Jack    USA
    1   Mary    Canada
    2   Marco   Italy
    3   Isabel  NaN
    
[/code]

のように並べるにはどうしたらよいでしょうか。良い方法がございましたら、教えていただけると幸いです。よろしくお願い致します。


CC BY-SA 3.0
2018-02-20T12:15:22.867
41869
2018-02-21T01:03:39.317
27294
question
python pandas
データフレーム:共通する要素のみ取り出す


`isin`で要素をチェックします。そのあといろいろ方法ありますが、次の方法は一行でできます。データ量が多い場合、もっと実行速い方法があります。又、一行複数の国名がある場合については未対応です。

[code]

    df1[df1.isin(df2.Country.values)].ffill(axis=1).iloc[:, -1]
    
[/code]

出力は

[code]

    0       USA
    1    Canada
    2     Italy
    3       NaN
    Name: Text7, dtype: object
    
[/code]


CC BY-SA 3.0
2018-02-21T01:03:39.317
41879
2018-02-21T01:03:39.317
8488
41869
answer