gpt4 book ai didi

python - 改善 Pandas 的设置值

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:08 28 4
gpt4 key购买 nike

我想为组特征(std、mean...)添加一些列,下面的代码有效,但数据集真的很大而且性能很差。有改进代码的好主意吗?谢谢

import pandas as pd

df = pd.DataFrame([[1,2,1], [1,2,2], [1,3,3], [1,3,4],[2,8,9], [2,11,11]], columns=['A', 'B', 'C'])
df['mean'] = 0

df2 = df.groupby('A')
for a, group in df2:
mean = group['C'].mean()
df.loc[df['A'] == a, 'mean'] = mean

df
'''
A B C mean
0 1 2 1 2.5
1 1 2 2 2.5
2 1 3 3 2.5
3 1 3 4 2.5
4 2 8 9 10.0
5 2 11 11 10.0
'''

最佳答案

Pandas 的 groupby.transform完成在原始索引中广播聚合统计信息的工作。这使其非常适合您的目的,应该被视为执行此任务的惯用方式。

生成带有新列的 df 副本的流水线解决方案

df.assign(Mean=df.groupby('A').C.transform('mean'))

A B C Mean
0 1 2 1 2.5
1 1 2 2 2.5
2 1 3 3 2.5
3 1 3 4 2.5
4 2 8 9 10.0
5 2 11 11 10.0

就地分配

df['Mean'] = df.groupby('A').C.transform('mean')
df

A B C Mean
0 1 2 1 2.5
1 1 2 2 2.5
2 1 3 3 2.5
3 1 3 4 2.5
4 2 8 9 10.0
5 2 11 11 10.0

或者,您可以使用 pd.factorizenp.bincount

f, u = pd.factorize(df.A.values)
totals = np.bincount(f, df.C.values)
counts = np.bincount(f)
df.assign(Mean=(totals / counts)[f])

A B C Mean
0 1 2 1 2.5
1 1 2 2 2.5
2 1 3 3 2.5
3 1 3 4 2.5
4 2 8 9 10.0
5 2 11 11 10.0

关于python - 改善 Pandas 的设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49061430/

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