PandasはDataFrame単列/多列を演算する(map,apply,transform,agg)

1373 ワード

1.単列演算
Pandasでは、DataFrameの列がSeriesであり、mapで列を操作できます.
df['col2'] = df['col1'].map(lambda x: x**2)

ここでlambda関数のxは現在の要素を表します.lambda関数の代わりに別の関数を使用できます.たとえば、次のようにします.
define square(x):
    return (x ** 2)

df['col2'] = df['col1'].map(square)

2.複数列演算
DataFrameの複数のカラムを同時に演算するには、col 3=col 1+2*col 2のようなapplyを使用します.
df['col3'] = df.apply(lambda x: x['col1'] + 2 * x['col2'], axis=1)

ここで、xは現在の行を表し、下付きでインデックスできます.
3.グループ化演算
groupbyとtransformを組み合わせて、SQLのような集約演算の操作を容易に実現できます.
df['col3'] = df.groupby('col1')['col2'].transform(lambda x: (x.sum() - x) / x.count())

transform関数では、x.sum()はx.cont()とSQLと同様に、現在のgroupの和と数を計算します.transformの結果をマッピングとして使用することもできます.たとえば、次のようにします.
sumcount = df.groupby('col1')['col2'].transform(lambda x: x.sum() + x.count())

df['col1'].map(sumcount)

col 1に対してmapを1つ行い、対応するcol 2の演算値を得る.
4.集約関数
groupbyとaggを組み合わせてSQLのパケット集約演算を実現するには、対応する集約関数を使用する必要があります.
df['col2'] = df.groupby('col1').agg({'col1':{'col1_mean': mean, 'col1_sum‘’: sum}, 'col2': {'col2_count': count}})
上記コードはcol 1_を生成したmean, col1_sumとcol 2_count列.