【问题标题】:How can I append a Series to an existing DataFrame row with pandas?如何使用熊猫将系列附加到现有的 DataFrame 行?
【发布时间】:2021-04-25 11:58:26
【问题描述】:

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

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 循环来执行此操作,将不同的系列附加到数据帧的每一行。该系列可能有不同的长度。有没有简单的方法可以做到这一点?

【问题讨论】:

  • 您能否为所需的输出提供多个系列?

标签: pandas dataframe append series


【解决方案1】:

试试这个:

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

【讨论】:

  • 这并不能真正满足我的需要,因为我事先不知道需要多少新列
  • @scottdun5 Edietd 我的回答请查看
【解决方案2】:

使用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

【讨论】:

    猜你喜欢
    • 2019-10-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多