情報をお探しでしたらインデックスで
DataFrame
と をマージする方法Series
、ご覧くださいこの答え。OPの当初の意図は、シリーズ要素を別の DataFrame の列として割り当てる方法この答えを知りたい方は、受け入れられた回答EdChum 著。
私が思いつく最高のものは
df = pd.DataFrame({'a':[1, 2], 'b':[3, 4]}) # see EDIT below
s = pd.Series({'s1':5, 's2':6})
for name in s.index:
df[name] = s[name]
a b s1 s2
0 1 3 5 6
1 2 4 5 6
より良い構文/より速い方法を提案してくれる人はいますか?
私の試み:
df.merge(s)
AttributeError: 'Series' object has no attribute 'columns'
そして
df.join(s)
ValueError: Other Series must have a name
編集最初に投稿された 2 つの回答では、私の質問の問題点が強調されているので、次のものを使用して作成してくださいdf
。
df = pd.DataFrame({'a':[np.nan, 2, 3], 'b':[4, 5, 6]}, index=[3, 5, 6])
最終結果
a b s1 s2
3 NaN 4 5 6
5 2 5 5 6
6 3 6 5 6
ベストアンサー1
アップデート
v0.24.0以降では、マージSeries に名前が付けられている限り、DataFrame および Series に適用されます。
df.merge(s.rename('new'), left_index=True, right_index=True)
# If series is already named,
# df.merge(s, left_index=True, right_index=True)
今では、SeriesをDataFrameに変換するには、フレームへ移動()したがって(インデックスで結合する場合):
df.merge(s.to_frame(), left_index=True, right_index=True)