gpt4 book ai didi

python - 在 python 中使用 size() 在数据框中输出为零

转载 作者:太空宇宙 更新时间:2023-11-03 23:58:36 25 4
gpt4 key购买 nike

我有一个包含三列的文件:A、B 和 C 以及一些整数。使用 python,假设我想 grouby() 列 'A' 并获取列中数字大于 4 、 6 和 8 的每个组的 size() '乙'。所以我实现了下面的代码:

    >>> import pandas as pd
>>>
>>> df = pd.read_csv("test.txt", sep="\t")
>>> df
A B C
0 1 4 3
1 1 5 4
2 1 2 10
3 2 7 2
4 2 4 4
5 2 6 6
>>>
>>> out1 = df[df['B'] > 4].groupby(['A']).size().reset_index()
>>> out1
A 0
0 1 1
1 2 2
>>> out2 = df[df['B'] > 6].groupby(['A']).size().reset_index()
>>> out2
A 0
0 2 1
>>> out3 = df[df['B'] > 8].groupby(['A']).size().reset_index()
>>> out3
Empty DataFrame
Columns: [A, 0]
Index: []
>>>

out1 是我想要的输出。但是对于 out2out3,如何得到类似于 out1 的数据帧,如下所示为零?

out2:
A 0
0 2 1
1 2 0

out3:
A 0
0 2 0
1 2 0

提前致谢。

最佳答案

想法是创建 bool 掩码,转换为整数并聚合 sum - 这里需要按 Series 分组,例如 df['A']而不是列名A:

out3 = (df['B'] > 8).astype(int).groupby(df['A']).sum().reset_index()
#alternative
#out3 = (df['B'] > 8).view('i1').groupby(df['A']).sum().reset_index()
print (out3)
A B
0 1 0
1 2 0

另一个想法是创建辅助列 - 例如将 B 分配给新值,然后聚合 sum:

out3 = df.assign(B = (df['B'] > 8).astype(int)).groupby('A')['B'].sum().reset_index()
print (out3)
A B
0 1 0
1 2 0

关于python - 在 python 中使用 size() 在数据框中输出为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56620037/

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