我正在尝试使用countif
做一个Excel pandas
函数,但是这样做遇到了障碍。
我有这个dataframe
。我需要按季度计算每个国家的YES
。我已经在下面发布了所需的答案。
result.head(3)
Country Jan 1 Feb 1 Mar 1 Apr 1 May 1 Jun 1 Quarter_1 Quarter_2
FRANCE Yes Yes No No No No 2 0
BELGIUM Yes Yes No Yes No No 2 1
CANADA Yes No No Yes No No 1 1
我尝试了以下操作,但是Pandas
吐出了一个总值,而不是显示5
下所有值的Quarter_1
。我忘了如何通过Country
计算下面的函数?请提供任何帮助!
result['Quarter_1'] = len(result[result['Jan 1'] == 'Yes']) + len(result[result['Feb 1'] == 'Yes'])
+ len(result[result['Mar 1'] == 'Yes'])
答案 0 :(得分:3)
我们可以使用您的专栏长度,并进行楼板划分来创建您的宿舍。然后,我们将这些分组,并求和。
最后,我们添加前缀Quarter
:
df = df.set_index('Country')
grps = np.arange(len(df.columns)) // 3
dfn = (
df.join(df.eq('Yes')
.groupby(grps, axis=1)
.sum()
.astype(int)
.add_prefix('Quarter_'))
.reset_index()
)
或使用列表推导对列进行重命名:
df = df.set_index('Country')
grps = np.arange(len(df.columns)) // 3
dfn = df.eq('Yes').groupby(grps, axis=1).sum().astype(int)
dfn.columns = [f'Quarter_{col+1}' for col in dfn.columns]
df = df.join(dfn).reset_index()
Country Jan 1 Feb 1 Mar 1 Apr 1 May 1 Jun 1 Quarter_1 Quarter_2
0 FRANCE Yes Yes No No No No 2 0
1 BELGIUM Yes Yes No Yes No No 2 1
2 CANADA Yes No No Yes No No 1 1