gpt4 book ai didi

python - Pandas 数据框上的条件过滤器和分组

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:53 25 4
gpt4 key购买 nike

我有一个具有以下结构的数据框:

    date    kind    sector
0 2017-02-01 P A
1 2017-02-01 P A
2 2017-02-01 L A
3 2017-02-01 G A
4 2017-02-01 P B
5 2017-02-01 P B
6 2017-02-01 L B
7 2017-02-01 T B
8 2017-02-02 P A
9 2017-02-02 P A
10 2017-02-02 L A
11 2017-02-02 T A
12 2017-02-02 A B
13 2017-02-02 P B
14 2017-02-02 L B
15 2017-02-02 L B

我想创建一个具有以下格式的聚合

    date      sector free occupied total
2017-02-01 A 2 2 4
2017-02-01 B 2 2 4
2017-02-02 A 2 2 4
2017-02-02 A 3 1 4

规则是如果kind == P被占用,else是空闲的,total是所有条目的总和。我尝试在分组依据上使用 apply 但它不起作用:

df.groupby(['date', 'kind']).apply(lambda x: 1 if x == 'P' else 0)

拆分数据框和合并也不起作用:

df_p = df[df.kind == 'P']
df_np = df[df.kind != 'P']
df_t = df_p.groupby(['date', 'sector'], as_index=False).count()
df_nt = df_np.groupby(['date', 'sector'], as_index=False).count()
df_nt.rename(columns={'kind':'free'}, inplace=True)
df_t = pd.concat([df_t, df_nt])

有没有办法做这个计数?

最佳答案

为“occupied”和“free”创建两个新变量:

df['occupied'] = (df.kind == "P").astype(int)
df['free'] = (df.kind != "P").astype(int)

然后聚合(在这里使用 OrderedDict 而不是 dict 来实现所需的输出列排序):

df_2 = (
df.groupby(["date","sector"])
.agg(OrderedDict((("free" , np.sum) , ("occupied" , np.sum))))
)

并创建您的总计列:

df_2["total"] = df_2["free"] + df_2["occupied"]

输出:

enter image description here

关于python - Pandas 数据框上的条件过滤器和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43923740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com