Pandas 如何在大熊猫的条件下进行分组?
我有一张像下面这样的桌子 日期 火车 条件1 条件2 第1天 1111 真的 0 第2天 2222 假的 2. 尝试通过Pandas 如何在大熊猫的条件下进行分组?,pandas,dataframe,group-by,Pandas,Dataframe,Group By,我有一张像下面这样的桌子 日期 火车 条件1 条件2 第1天 1111 真的 0 第2天 2222 假的 2. 尝试通过groupby()和agg()方法: out=(df.groupby('date',as_index=False) .agg( {'train':'count','condition 1':lambda x:x,'condition 2':lambda x:x.gt(0)} ) ) out[['conditi
groupby()
和agg()
方法:
out=(df.groupby('date',as_index=False)
.agg(
{'train':'count','condition 1':lambda x:x,'condition 2':lambda x:x.gt(0)}
)
)
out[['condition 1','condition 2']]=out[['condition 1','condition 2']].astype(int)
最后使用astype()
方法:
out=(df.groupby('date',as_index=False)
.agg(
{'train':'count','condition 1':lambda x:x,'condition 2':lambda x:x.gt(0)}
)
)
out[['condition 1','condition 2']]=out[['condition 1','condition 2']].astype(int)
输出的输出
:
date train condition 1 condition 2
0 day1 1 1 0
1 day2 1 0 1
如果需要更改列的名称,请使用:
out.columns=['date','train total count','train with condition 1 is true','train with condition 2']
让我们试试groupby agg
df.groupby('date').agg(traintotalcount=('train', 'count'), trainwithcondition1istrue=('condition 1', lambda x: x.astype(int)), trainwithcondition2gt0=('condition 2', lambda x: int(x>0)))
结果
traintotalcount trainwithcondition1istrue trainwithcondition2gt0
date
day1 1 1 0
day2 1 0 1
可以使用.agg()方法为不同的列应用不同的聚合
试试这个:
df.groupby('date').agg({'train':'count',
'condition 1':'sum',
'condition 2': lambda x: (x>0).sum()})
输出:
train condition 1 condition 2
date
day1 1 1 0
day2 1 0 1
注意,如果
条件1
是一个布尔列,在进行求和时,python将True
视为1
,将False
视为0
。为了提高性能,请在groupby之前将True
的值与0
类似,然后在,对于新列,使用带空格的名称**
解包技巧:
df1 = (df.assign(new = df['condition 2'].gt(0))
.groupby('date')
.agg(**{'train total count': ('train', 'count'),
'train with condition 1 is true': ('condition 1','sum'),
'train with condition 2 > 0':('new','sum')})
.reset_index())
print (df1)
date train total count train with condition 1 is true \
0 day1 1 1
1 day2 1 0
train with condition 2 > 0
0 0
1 1
agg(**)的含义是什么?为什么我们需要**来表示agg?事实上,我发现如果您想要的输出列名不是有效的Python关键字,那么构建一个字典并解压关键字参数。如果我们需要多个条件呢?