具有多个值列的轴

2024-06-07 18:22:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个5列的数据框。 年、月、A1、A2和;A3

我需要一个基于年份的汇总表;一个月

A1应该是一个有条件的计数。 A2应该是一个和。 A3应该是一个计数

我试图做一个透视,但似乎熊猫透视只选择一列作为值字段

我试着数数;分别对列求和,但我需要的是一个汇总表

df1=df.loc[(df['A1'] == 'Y') | (df['A2'] == 'DY')].count()

df2=df['A2'].sum()

df3=df['A3'].count()

Tags: 数据a2dfa1count条件loca3
1条回答
网友
1楼 · 发布于 2024-06-07 18:22:23

因为您没有提供代码,所以我必须创建自己的DF,所以我希望我的解决方案是:

  1. 数据:
np.random.seed(10)

data = {
    'Year': np.random.choice(["2015", "2016"], (10)),
    'Month': np.random.choice(["Jan", "September"], (10)),
    'A1': np.random.choice(["Y", "X"], (10)),
    'A2': np.random.choice(["DY", "DX"], (10)),
    'A3': np.random.choice(["A", "B"], (10)),
}
df = pd.DataFrame(data).sort_values(["Year", "Month"])

   Year      Month A1  A2 A3
4  2015        Jan  X  DY  B
7  2015        Jan  Y  DY  A
2  2015  September  Y  DY  B
0  2016        Jan  Y  DY  B
3  2016        Jan  Y  DY  A
6  2016        Jan  Y  DX  A
8  2016        Jan  X  DX  A
9  2016        Jan  Y  DX  B
1  2016  September  X  DX  B
5  2016  September  X  DX  A
  1. 按年份和月份分组:
groups = df.groupby(["Year", "Month"])
  1. 获取所需的聚合:
def specialSum(group):
    return ((group['A1'] == 'Y') | (group['A2'] == 'DY')).sum()

groups = df.groupby(["Year", "Month"])
pd.concat([groups.apply(lambda group: specialSum(group)).rename('A1'),
           groups.agg({'A2': 'sum', 'A3': 'count'})],
          axis=1)

输出:

                A1          A2  A3
Year Month                        
2015 Jan         2        DYDY   2
     September   1          DY   1
2016 Jan         4  DYDYDXDXDX   5
     September   0        DXDX   2

希望能有所帮助,如果您在评论中有问题,或者数据不具有代表性,请更新您的问题,以便我可以改进我的答案,例如,如果A2包含字符串,或者我的数据与您的不一样,我不认为A2的和是您想要的

Documentation of the function used:

Groupby: group rows based on values (can be series, mapped values, ...)

Groupby.apply: apply a function on the groups.

Groupby.agg: aggregate groups via specified agg function, can be done by a dict to specify different agg function for differents columns.

Concat: concatenate DataFrame along the specified axis.

相关问题 更多 >

    热门问题