Python Pandas Groupby:如何获取不同的列值
尝试在分组后为列获取不同的值;但是我得到了一个总数 groupby正在删除对象区分并丢失列的前导零 df=pd.read_csv(“trial.txt”,sep='|',converters={'zip':str},keep_default_na=True,low_memory=False) 数据:Python Pandas Groupby:如何获取不同的列值,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,尝试在分组后为列获取不同的值;但是我得到了一个总数 groupby正在删除对象区分并丢失列的前导零 df=pd.read_csv(“trial.txt”,sep='|',converters={'zip':str},keep_default_na=True,low_memory=False) 数据: Emp State Zip Jan feb mar Int NY 11111 1 0 1 int NY 11111 1 1 0
Emp State Zip Jan feb mar
Int NY 11111 1 0 1
int NY 11111 1 1 0
int NC 09999 2 2 0
int ON NH443 2 2 2
之后
df2 = df.groupby("Zip").count()
zip=11111的zip my输出的df2
我将有所有12个月的输出显示2。
如果我期望的是211
邮政编码09999显示为9999
分组不获取不同列值的错误。
具有非空值的帐户(不存在空值)。列值仅为(0、1、2)
count
返回每个组的计数,不包括缺少的值。这意味着零值也将包含在计数中。若要仅对正值进行计数,可以应用lambda函数对大于零的值的计数求和
>>> df.groupby('Zip')[['Jan', 'feb', 'mar']].apply(lambda x: x.gt(0).sum())
Jan feb mar
Zip
09999 1 1 0
11111 2 1 1
NH443 1 1 1
让我们从为什么Zip列被读取为int开始
请注意细微的区别:
- 源文件中的第三列名称是Zip,大写字母为Z
- 在代码中,您将converters={'zip':str}与列名放在一起 以小写字母开始
df2=df.groupby('Zip').count()时,结果是:
Emp State Jan Feb Mar
Zip
09999 1 1 1 1 1
11111 2 2 2 2 2
88443 1 1 1 1 1
Emp State Jan Feb Mar
Zip
09999 [Int] [NC] [2] [2] [0]
11111 [Int] [NY] [1] [0, 1] [0, 1]
88443 [Int] [ON] [2] [2] [2]
注意计数函数的描述(GroupBy变量),
其内容为:计算组的计数,不包括缺少的值。
由于您没有传递任何列列表,因此将计算此计数
所有列
因此,您的代码不会生成不同的值,而是计数
每组中每列的非空值
如果您想要您在标题中所写的内容,即
不同的值,对于每一列(不是它们的计数),运行:
这一次的结果是:
Emp State Jan Feb Mar
Zip
09999 1 1 1 1 1
11111 2 2 2 2 2
88443 1 1 1 1 1
Emp State Jan Feb Mar
Zip
09999 [Int] [NC] [2] [2] [0]
11111 [Int] [NY] [1] [0, 1] [0, 1]
88443 [Int] [ON] [2] [2] [2]
例如,组11111包含在二月和三月列中
两个不同的值:0和1
在所有其他情况下(对于示例数据),每列
在每组中,包含一个独立的值,
因此相应的列表只包含一个元素。您能为所需的输出添加一个示例吗?