pandas 如何在panda中批量处理多列数据

hs1ihplo  于 2023-03-11  发布在  其他
关注(0)|答案(1)|浏览(217)

我有两个手术,第一个是

df['A'] = scipy.stats.norm.cdf(df['aScore'],
                               loc=df['amean'],scale=df['astd'])*100
df['B'] = scipy.stats.norm.cdf(df['bScore'],
                               loc=df['bmean'],scale=df['bstd'])*100
df['C'] = scipy.stats.norm.cdf(df['cScore'],
                               loc=df['cmean'],scale=df['cstd'])*100

另一个是

df['D'] = df.groupby(['col1','col2'])['D'].transform(sum)
df['E'] = df.groupby(['col1','col2'])['E'].transform(sum)
df['F'] = df.groupby(['col1','col2'])['F'].transform(sum)

有没有办法避免重复(以及循环),并把它们写在一个句子里?

mcvgt66p

mcvgt66p1#

对于第一个操作,可以使用apply()方法和lambda函数,一次对多个列应用相同的操作。
定义应用norm.cdf操作的函数

def apply_norm_cdf(column_name, mean_column_name, std_column_name):
return scipy.stats.norm.cdf(df[column_name],
                            loc=df[mean_column_name],
                            scale=df[std_column_name]) * 100

一次对多个列应用norm.cdf操作

df[['A', 'B', 'C']] = df.apply(lambda row: apply_norm_cdf(row.name + 'Score', row.name + 'mean', row.name + 'std'), axis=1)

对于另一个,对每列多次执行相同的groupby()操作可以简化如下。

df[['D', 'E', 'F']] = df.groupby(['col1', 'col2'])[['D', 'E', 'F']].transform(sum)

相关问题