24

複数の列を持つ新しい DataFrame を作成する場合は、すべての列を一度に追加できます。たとえば、次のようにします。

data = {'col_1': [0, 1, 2, 3],
        'col_2': [4, 5, 6, 7]}
df = pd.DataFrame(data)

しかし、この DataFrame に追加の列のセットを追加したいとします。のように、それらをすべて同時に追加する方法はありますか

additional_data = {'col_3': [8, 9, 10, 11],
                   'col_4': [12, 13, 14, 15]}
#Below is a made-up function of the kind I desire.
df.add_data(additional_data)

私はこれを行うことができることを知っています:

for key, value in additional_data.iteritems():
    df[key] = value

またはこれ:

df2 = pd.DataFrame(additional_data, index=df.index)
df = pd.merge(df, df2, on=df.index)

私はちょうど何かきれいなものを望んでいました。これら 2 つのオプションで行き詰まっている場合、どちらが優先されますか?

4

4 に答える 4

8

から新しい DataFrame を作成したくない場合はadditional_data、次のようなものを使用できます。

>>> additional_data = [[8, 9, 10, 11], [12, 13, 14, 15]]
>>> df['col3'], df['col4'] = additional_data
>>> df
   col_1  col_2  col3  col4
0      0      4     8    12
1      1      5     9    13
2      2      6    10    14
3      3      7    11    15

次のようなことも可能ですが、既存の DataFrame のインプレース変更ではなく、新しい DataFrame になります。

>>> additional_header = ['col_3', 'col_4']
>>> additional_data = [[8, 9, 10, 11], [12, 13, 14, 15]]
>>> df = pd.DataFrame(data=np.concatenate((df.values.T, additional_data)).T, columns=np.concatenate((df.columns, additional_header)))
>>> df
   col_1  col_2  col_3  col_4
0      0      4      8     12
1      1      5      9     13
2      2      6     10     14
3      3      7     11     15
于 2013-11-08T19:20:56.980 に答える
0

追加のデータフレームからのデータを使用して新しい列を作成するだけです。

data =            {'col_1': [0, 1, 2, 3],
                   'col_2': [4, 5, 6, 7]}
additional_data = {'col_3': [8, 9, 10, 11],
                   'col_4': [12, 13, 14, 15]}
df = pd.DataFrame(data)
df2 = pd.DataFrame(additional_data)

df[df2.columns] = df2

df は次のようになります。

   col_1  col_2  col_3  col_4
0      0      4      8     12
1      1      5      9     13
2      2      6     10     14
3      3      7     11     15

インプレース左結合を実行したかのように、元のデータフレームのインデックスが使用されます。追加のデータフレームで一致する名前を持つ列の元のデータフレームからのデータは上書きされます。例えば:

data =            {'col_1': [0, 1, 2, 3],
                   'col_2': [4, 5, 6, 7]}
additional_data = {'col_2': [8, 9, 10, 11],
                   'col_3': [12, 13, 14, 15]}
df = pd.DataFrame(data)
df2 = pd.DataFrame(additional_data, index=[0,1,2,4])

df[df2.columns] = df2

df は次のようになります。

   col_1  col_2  col_3
0      0      8     12
1      1      9     13
2      2     10     14
3      3    NaN    NaN
于 2015-08-21T14:03:05.493 に答える