问题描述
我想拍摄一个系列并将其附加到现有的数据框行。例如:
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