我对熊猫还不熟悉,创建了以下示例来说明我喜欢解决的问题
数据
考虑以下数据文件:
df = pd.DataFrame({ 'Person': ['Adam', 'Adam', 'Cesar', 'Diana', 'Diana', 'Diana', 'Erika', 'Erika'],
'Belonging': ['House', 'Car', 'Car', 'House', 'Car', 'Bike', 'House', 'Car'],
'Value': [300, 10, 12, 450, 15, 2, 600, 11],
})
看起来是这样的:
Person Belonging Value
0 Adam House 300
1 Adam Car 10
2 Cesar Car 12
3 Diana House 450
4 Diana Car 15
5 Diana Bike 2
6 Erika House 600
7 Erika Car 11
问题
如果人们拥有价值超过400英镑的房子,如何计算他们汽车的价值
我想要的结果是:
Person Belonging Value
4 Diana Car 15
7 Erika Car 11
我如何在Pandas中实现这一点,是否有类似于子查询的内容
子查询
在SQL中有一种叫做子查询的东西。也许熊猫身上也有类似的东西
SELECT *
FROM df
WHERE person IN
(SELECT person
FROM df
WHERE belonging='House' AND value>400)
AND belonging='Car';
person belonging value
---------- ---------- ----------
Diana Car 15
Erika Car 11
印刷品:
考虑基于集合的(类似SQL)方法,使用{{CD1>}和^ {< CD2>}保留您的^ {CD3>}子句:
或者没有房子的柱子:
您可以使用的一种方法非常类似于SQL语句
首先找到房屋价值超过400美元的人:
这将返回一个系列与“戴安娜”和“埃里卡”
然后为这些人找到汽车:
这将返回您预期的结果
对^{} 也可以使用联接,这可能比对大型数据集使用
isin()
更有效:然后你可以通过过滤找到汽车:
这也将返回您预期的结果
解决此问题的一种不同方法是通过将个人物品转换为列来透视数据,这样每个人就可以有一行列出他们的所有物品
您可以使用^{} 将此数据放入一个相对平坦的数据框:
在这一点上,您可以通过以下方式找到房屋价值超过400美元的人的汽车价值:
请注意,最后一个将返回一个序列,而不是一个数据帧,因为Person现在被转换为索引。如果您想收集关于某人的更多信息,pivot dataframe方法非常有用,因此将某人放在一行中可以非常轻松地访问与此人相关的所有数据
相关问题 更多 >
编程相关推荐