1. ホーム
  2. python

[解決済み] シリーズとデータフレームを結合する方法

2022-10-30 06:03:48

質問

に関する情報を探しに来たのなら どのように をマージする DataFrameSeries インデックスに を見てください。 この 答え .

OPの本来の意図は、次のような質問でした。 を列として別のデータフレームに割り当てる方法です。 を別のデータフレームに列として割り当てる方法 . もし、あなたがこの答えを知りたければ をご覧ください。 受付回答 をご覧ください。


私が思いつく最高のものは

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

EDIT 最初に投稿された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

どのように解決するのですか?

系列からデータフレームを構築して、そのデータフレームとマージする方法があります。 つまり、データを値として指定しますが、長さを掛けて、列をインデックスに設定し、left_indexとright_indexのparamをTrueに設定します。

In [27]:

df.merge(pd.DataFrame(data = [s.values] * len(s), columns = s.index), left_index=True, right_index=True)
Out[27]:
   a  b  s1  s2
0  1  3   5   6
1  2  4   5   6

EDIT シリーズから構築したdfのインデックスをdfのインデックスとして使用したい場合、以下のようにします。

df.merge(pd.DataFrame(data = [s.values] * len(df), columns = s.index, index=df.index), left_index=True, right_index=True)

これは、インデックスが長さと一致することを前提としています。