如何使用 Pandas 将系列附加到现有的 DataFrame 行?

问题描述

我想拍摄一个系列并将其附加到现有的数据框行。例如:

df

   A  B  C
0  2  3  4
1  5  6  7
2  7  8  9

series

0 x 
1 y
2 z

-->

   A  B  C D E F
0  2  3  4 x y z
1  5  6  7 ...
2  7  8  9 ...

我想使用 for 循环来执行此操作,将不同的系列附加到数据框的每一行。该系列可能有不同的长度。有没有简单的方法来实现这一点?

解决方法

使用 loc 和系列的索引作为列名

lst = [
    [2,3,4],[5,6,7],[7,8,9]
]

df = pd.DataFrame(lst,columns=list("ABC"))
print(df)
### 
   A  B  C
0  2  3  4
1  5  6  7
2  7  8  9

s1 = pd.Series(list("xyz"))
s1.index = list("DEF")
print(s1)
###
D    x
E    y
F    z
dtype: object

s2 = pd.Series(list("abcd"))
s2.index = list("GHIJ")
print(s2)
###
G    a
H    b
I    c
J    d
dtype: object

for idx,s in enumerate([s1,s2]):
    df.loc[idx,s.index] = s.values

print(df)
### 
   A  B  C    D    E    F    G    H    I    J
0  2  3  4    x    y    z  NaN  NaN  NaN  NaN
1  5  6  7  NaN  NaN  NaN    a    b    c    d
2  7  8  9  NaN  NaN  NaN  NaN  NaN  NaN  NaN
,

试试这个:

df['D'],df['E'],df['F'] = s.tolist()

现在:

print(df)

给出:

   A  B  C  D  E  F
0  2  3  4  x  y  z
1  5  6  7  x  y  z
2  7  8  9  x  y  z

编辑:

如果您不确定有多少额外的值,请尝试:

from string import ascii_uppercase as letters
df = df.assign(**dict(zip([letters[i + len(df.columns)] for i,v in enumerate(series)],series.tolist())))
print(df)

输出:

   A  B  C  D  E  F
0  2  3  4  x  y  z
1  5  6  7  x  y  z
2  7  8  9  x  y  z