为每个国家计算一定的价值

时间:2020-04-06 22:07:37

标签: python pandas

我正在尝试使用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'])

1 个答案:

答案 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