2017-06-28 11 views
1

インデックスと列で準備されたpandas DataFrameを持っています。すべての値はNaNです。 これでDataFrameの複数の行に使用できる結果が計算されました。すべてを一度に割り当てたいと思います。これはループで行うことができますが、この割り当てを一度に行うことができます。ここでシリーズを複数のPandas DataFrameの行に割り当てる

はシナリオです:

import pandas as pd 
df = pd.DataFrame(index=['A', 'B', 'C'], columns=['C1', 'C2']) # original df 
s = pd.Series({'C1': 1, 'C2': 'ham'}) # a computed result 
index = pd.Index(['A', 'C']) # result is valid for rows 'A' and 'C' 

単純なアプローチは

df.loc[index, :] = s 

である。しかし、これはまったくのデータフレームを変更しません。残っているのは

C1 C2 
A NaN NaN 
B NaN NaN 
C NaN NaN 

どのようにこの割り当てを行うことができますか?

答えて

3

それは我々が割り当てることが基本となる配列データを使用することができるようだ -

df.loc[index, :] = s.values 

さて、これはsのインデックスの順序がdfの列と同じであることを前提としています。そうでない場合は、suggested by @Nrasのように、右側の割り当てにs[df.columns].valuesを使用できます。

+0

これは実際にこのケースでは機能するようです。しかし、シリーズとDataFrameの両方で列の順序が同じであることを確認する必要があると思います。すなわち、 '' df.loc [index、:] = s [df.columns] .values'' – Nras

+0

@Nras良い点!ありがとう。それに応じて編集。 – Divakar

関連する問題