2017-04-23 9 views
2

私はKaggle TitanicコンペのCSVファイルを次のように持っています。このファイルのレコード形式は、 PassengerId、Survived、Pclass、Name、Sex、Age、SibSp、Parch、Ticket、Fare、Cabin、Embarkedの列で記述されています。 私はこのファイルのデータを分析し、グループを旅している乗客の生存率が良いかどうかを確認したいと思います。このため、私はチケットの値がグループ内のすべての乗客に同じであると仮定します。パンダの相関サブクエリに相当する方法

私はMS AccessでCSVをロードし、そして所望の結果セットを取得するために、次のクエリを実行:

SELECT a.Ticket, a.PassengerId, a.Survived 
FROM train a 
WHERE 1 < (SELECT COUNT(*) FROM train b WHERE b.Ticket = a.Ticket) 
ORDER BY a.Ticket 

私はループを記述することなく、上記のように同じ結果セットを抽出することができないのですが。

+3

あなたが期待した結果の少なくともいくつかの記録を投稿すれば、質問と回答の理解を検証できるようになります。 –

+0

ここでは、csvファイルから作成したAccess DBでSQLを実行して得たレコードをいくつか示します。私はあなたがSQLの出力に対して書いたパンダスクリプトの出力を検証し、それらは完全にうまく一致しました。 チケット、PassengerIdは、 "110152"、258,1 "110152"、505,1 "110152"、760,1 "110413"、263,0 "110413"、559,1 "110413" を生き残っ、586,1 "110465"、111,0 "110465"、476,0 "111361"、330,1 "111361"、524,1 "113505"、167,1 "113505"、357 、1 "113572"、62,1 "113572"、830,1 "113760"、391,1 "113760"、436,1 "113760"、764,1 "113760"、803,1 –

答えて

2

これが一致した場合を見てみましょう:

df.groupby(['Ticket']).filter(lambda x: x.Ticket.count()>1)[['Ticket','PassengerId','Survived']] 

それともJezraelの提案と:

df.groupby(['Ticket']).filter(lambda x: len(x)>1)[['Ticket','PassengerId','Survived']] 

私はそのチケットグループのカウントがあるそれらのレコードに自分のデータフレームをフィルタリングチケットのgroupbyを使用していますfilterを使用して1より大きい。

+1

'len(x)> 1'が' Na.Typet.count()>がなければ '1' N値。 – jezrael

+0

私は@jezraelに同意します。私はlen(x)を使うべきです。 CountはNaNを値として考慮しないため、lenはすべてのレコードを取得します。 –

+0

ありがとうございます。それは一致した。このケースでは、NaNをスキップしたいと思います。チケットの列に不明な値を持つすべての乗客を1つのグループで移動するとみなしたくないからです。したがって、私はlen()に対してcount()を使用しました。 –

関連する問題