Python 数据帧条件选择查询?
我有两个数据集 i) 。旧金山工资数据 (ii)。伪造亚马逊订单数据 现在我有一个疑问,因为在一个数据集中,我的条件选择逻辑起作用,但在另一个数据集中,我必须使用另一个逻辑 1.圣弗朗西科的例子 数据 这不管用。它在应该输出202的地方输出0Python 数据帧条件选择查询?,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据集 i) 。旧金山工资数据 (ii)。伪造亚马逊订单数据 现在我有一个疑问,因为在一个数据集中,我的条件选择逻辑起作用,但在另一个数据集中,我必须使用另一个逻辑 1.圣弗朗西科的例子 数据 这不管用。它在应该输出202的地方输出0 sum(sal[sal['Year']==2013]['JobTitle'].value_counts()==1) 这是有效的。但这不是直觉 2.电子商务还是亚马逊的例子 数据 这在这里提供了完美的输出。我想知道为什么在上述情况下它不起作用 顺便说一句,
sum(sal[sal['Year']==2013]['JobTitle'].value_counts()==1)
这是有效的。但这不是直觉
2.电子商务还是亚马逊的例子
数据
这在这里提供了完美的输出。我想知道为什么在上述情况下它不起作用
顺便说一句,这里是完全的新手,4-5天前刚开始。我认为需要使用与原始数据帧大小相同的返回序列:
out = ((sal['Year']==2013) & (sal.groupby(['JobTitle','Year'])['JobTitle'].transform('size')==1)).sum()
#count exclude NaN of JobTitle if exist
out = ((sal['Year']==2013) & (sal.groupby(['JobTitle','Year'])['JobTitle'].transform('count')==1)).sum()
对于排除每列的所有重复项,~
反转booelan掩码:
out = ((sal['Year']==2013) & ~(sal.duplicated(subset=['Year','JobTitle'], keep=False))).sum()
样本:
sal = pd.DataFrame({'JobTitle':list('abccbbd'),
'Year':[2012] + [2013] * 6})
print (sal)
JobTitle Year
0 a 2012
1 b 2013
2 c 2013
3 c 2013
4 b 2013
5 b 2013
6 d 2013
print (sal.groupby(['JobTitle','Year'])['JobTitle'].transform('size'))
0 1
1 3
2 2
3 2
4 3
5 3
6 1
Name: JobTitle, dtype: int64
out = ((sal['Year']==2013) & (sal.groupby(['JobTitle','Year'])['JobTitle'].transform('size')==1)).sum()
print (out)
1
您的第一个
值\u计数
似乎丢失parenthesis@Dav2357嘿,谢谢你指出这一点,但与帕伦太它与此警告相同的输出/Users/abhishekkumar/anaconda3/lib/python3.6/site packages/pandas/core/index/base.py:3140:RuntimeWarning:“这看起来和你做的方式很难。我是这里的新手。不过谢谢你的帮助,我会尽力消化的。顺便说一句,你能帮助我理解为什么我的逻辑只处理一个样本数据,而不处理另一个数据吗?它之所以有效,是因为它在第二个数据中按标量进行比较,第一个需要转换
来创建用于比较的序列。什么意思是它不能处理真实数据?@Abhishek-但我知道。首先创建新列,如sal['count']=sal.groupby(['JobTitle','Year'])['JobTitle'].transform('size')
,然后像第二个一样进行比较data@Abhishek-比如sal[(sal['Year']==2013)和(sal['count']==1)]
sal['count']=sal.groupby(['JobTitle','Year'])['JobTitle'].transform('size')。在这种情况下,我不理解这个转换('size')函数。你能详细说明它在做什么吗?我会尝试在我的系统上运行它来检查它。
import pandas as pd
ecom=pd.read_csv('EcommercePurchases.csv')
ecom.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10000 entries, 0 to 9999
Data columns (total 14 columns):
Address 10000 non-null object
Lot 10000 non-null object
AM or PM 10000 non-null object
Browser Info 10000 non-null object
Company 10000 non-null object
Credit Card 10000 non-null int64
CC Exp Date 10000 non-null object
CC Security Code 10000 non-null int64
CC Provider 10000 non-null object
Email 10000 non-null object
Job 10000 non-null object
IP Address 10000 non-null object
Language 10000 non-null object
Purchase Price 10000 non-null float64
dtypes: float64(1), int64(2), object(11)
memory usage: 1.1+ MB
len(ecom[(ecom['CC Provider']=='American Express') & (ecom['Purchase Price'] >95)])
out = ((sal['Year']==2013) & (sal.groupby(['JobTitle','Year'])['JobTitle'].transform('size')==1)).sum()
#count exclude NaN of JobTitle if exist
out = ((sal['Year']==2013) & (sal.groupby(['JobTitle','Year'])['JobTitle'].transform('count')==1)).sum()
out = ((sal['Year']==2013) & ~(sal.duplicated(subset=['Year','JobTitle'], keep=False))).sum()
sal = pd.DataFrame({'JobTitle':list('abccbbd'),
'Year':[2012] + [2013] * 6})
print (sal)
JobTitle Year
0 a 2012
1 b 2013
2 c 2013
3 c 2013
4 b 2013
5 b 2013
6 d 2013
print (sal.groupby(['JobTitle','Year'])['JobTitle'].transform('size'))
0 1
1 3
2 2
3 2
4 3
5 3
6 1
Name: JobTitle, dtype: int64
out = ((sal['Year']==2013) & (sal.groupby(['JobTitle','Year'])['JobTitle'].transform('size')==1)).sum()
print (out)
1