Python 数据帧条件选择查询?

Python 数据帧条件选择查询?,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据集 i) 。旧金山工资数据 (ii)。伪造亚马逊订单数据 现在我有一个疑问,因为在一个数据集中,我的条件选择逻辑起作用,但在另一个数据集中,我必须使用另一个逻辑 1.圣弗朗西科的例子 数据 这不管用。它在应该输出202的地方输出0 sum(sal[sal['Year']==2013]['JobTitle'].value_counts()==1) 这是有效的。但这不是直觉 2.电子商务还是亚马逊的例子 数据 这在这里提供了完美的输出。我想知道为什么在上述情况下它不起作用 顺便说一句,

我有两个数据集 i) 。旧金山工资数据 (ii)。伪造亚马逊订单数据

现在我有一个疑问,因为在一个数据集中,我的条件选择逻辑起作用,但在另一个数据集中,我必须使用另一个逻辑

1.圣弗朗西科的例子 数据 这不管用。它在应该输出202的地方输出0

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