私は多くの列multiindexシリーズでインデックスが見つからない場合、NaNを返す方法は?
を持つ2つのデータフレームのDF1とDF2を持ってDF1 -
は私がDF2に新しい列を追加する必要がある[22035行×11列] - [2756003行×44列]
DF2戻り
t1 = df1.groupby(['category', 'manufacturer'])
t2=t1[c1].mean()
str1='_'.join(col)
df2[c1+'_'+str1+'_mean']=t2[df2[['category','manufacturer']].as_matrix()].values
結果によってグループに基づいて、DF1 からターゲット列の平均値(DF1およびDF2内で同じ列):
IndexError: arrays used as indices must be of integer (or boolean) type
T2 - などの店舗のマルチインデックスシリーズ:私は、既存のインデックスを使用している場合
category manufacturer
1 2 0.000000
4 8.796840
10 2.312407
19 1.135094
24 4.355000
私は結果
In [302]: t2[1, 2]
Out[302]: 0.0
しかし、私はどこ332、[410、332] T2を呼び出す場合に予想される取得しますdf2で発表され、df1で発表されていないメーカーのIDです。
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
私が欲しい代わりに私たちが得るようにNaNは
df2['manufacturer'].map(t2)
の場合は1列しかありません。
df2 = pd.merge(df2, t2.reset_index(), on=['category','manufacturer'], how='left')
'category'
と'manufacturer'
は、その後のみ 列df2
と共通でt2.reset_index()
シェア、行している場合、デフォルトでは、pd.merge
は、すべての共有の列に加わり、以来:df2
とt2
をマージする
'はAttributeErrorがありました: 'CategoricalIndex' オブジェクトがカテゴリ '' メーカーの ' DF2 = pd.merge(DF2、t2.to_frame()、left_on = [後 is_dtype_equal'' 'は属性を持っていません'] =どの真 right_index =、' 左カテゴリ」、 'メーカー' ') ' 私は ' DF2 = pd.merge(DF2、t2.reset_index()、left_on = [この部分を変更します' ]、right_on = ['category'、 'manufacturer']、how = 'left') ' これは機能しています!おかげで – Roman
偉大な、訂正のおかげで。'left_on'と' right_on'は同じ列名を指定するので、単純に 'on = ['category'、 'manufacturer']'にすることができます。また、これらが2つのDataFramesで共有される唯一のカラムであれば、それを完全に省略することもできます。 – unutbu