gpt4 book ai didi

python-2.7 - 在 Python Pandas 中聚合组并输出特定计数的百分比

转载 作者:行者123 更新时间:2023-12-02 06:42:56 25 4
gpt4 key购买 nike

我试图弄清楚如何通过在新列上创建百分比和求和来聚合 Pandas 数据框中的组。

例如,在下面的数据框中,我有 A、B、C 和 D 列。我想按 A 中的组进行聚合,C 应该是(“1”的频率除以频率)的百分比非缺失值),D 应该是非缺失值的总和。

例如,对于“foo”组,生成的数据框应该是

A    B    C        D
foo 1.333 4

我可以在这里或那里做一些单独的部分,但不确定如何在一个连贯的脚本中进行编译:

import pandas
from pandas import DataFrame
import numpy as np


df = DataFrame({'A' : ['foo', 'foo', 'foo', 'foo',
'bar', 'bar', 'bar', 'bar'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : [1, np.NaN, 1, 2, np.NaN, 1, 1, 2], 'D' : [2, '', 1, 1, '', 2, 2, 1]})

print df

#df.C.fillna(999, inplace=True)
df.D.replace('', np.NaN, inplace=True)

print df

grouped = df.groupby('A')

#print grouped.last()
#print grouped.sum()
#print grouped.mean()
#print grouped.count()

grouped_aggre = grouped.aggregate(np.sum)

print grouped_aggre
print df.D.mean()
print df.C.mean()

print '//////////////////'
print df.C.count()
print df.C.value_counts(dropna=True)

此外,如何按 A 列和 B 列与上述 C 列和 D 列汇总统计数据进行聚合?

原始数据框:

     A      B   C   D
0 foo one 1 2
1 foo one NaN NaN
2 foo two 1 1
3 foo three 2 1
4 bar two NaN NaN
5 bar two 1 2
6 bar one 1 2
7 bar three 2 1

预期结果:

A    B    C        D
foo 1.333 4
bar 1.333 5

最佳答案

您可以使用groupby/agg执行求和和计数:

result = df.groupby(['A']).agg({'C': lambda x: x.sum()/x.count(), 'D':'sum'})
<小时/>
import numpy as np
import pandas as pd

df = pd.DataFrame(
{'A' : ['foo', 'foo', 'foo', 'foo',
'bar', 'bar', 'bar', 'bar'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : [1, np.NaN, 1, 2, np.NaN, 1, 1, 2],
'D' : [2, '', 1, 1, '', 2, 2, 1]})
df['D'].replace('', np.NaN, inplace=True)

result = df.groupby(['A']).agg({'C': lambda x: x.sum()/x.count(), 'D':'sum'})
print(result)

产量

            C  D
A
bar 1.333333 5
foo 1.333333 4

关于python-2.7 - 在 Python Pandas 中聚合组并输出特定计数的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32566866/

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