我有一个来自Kaggle Titanic竞赛的CSV文件,如下所示。下面的列描述了该文件的记录格式:
PassengerId,幸存下来,Pclass,名称,性别,年龄,SibSp,Parch,机票,票价,客舱,出发。
我想分析此文件中的数据,并检查一组乘客的存活率是否更高。为此,我假设对于一个组中的所有乘客,Ticket的值都将相同。

我将CSV加载到MS Access中,并执行以下查询以获取所需的结果集:

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

我无法在不编写循环的情况下提取与上述相同的结果集。

最佳答案

让我们看看这是否匹配:

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

或在耶斯莱尔的建议下:
df.groupby(['Ticket']).filter(lambda x: len(x)>1)[['Ticket','PassengerId','Survived']]

我在票证上使用groupby,然后使用filter将我的数据框过滤到那些票证组中的计数大于1的记录。

关于python - 如何在 Pandas 中执行相关子查询的等效项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43574675/

10-12 18:51