我有一个系列,比如:
A 2
B 3
C 4和一个类似的DataFrame:
A B C
0 1 2 3
1 4 5 6
2 7 8 9我想将序列赋值给数据帧中的所有行。这是预期的输出:
A B C
0 2 3 4
1 2 3 4
2 2 3 4当然我能做到
for col in ser.index:
df[col] = ser[col]但是,什么是更有效的方法呢?
发布于 2020-01-16 12:58:16
使用pandas.DataFrame.div和mul
df.div(df).mul(s)或者使用numpy.tile (iff df.columns == s.index)要快得多:
pd.DataFrame(np.tile(s, (len(df), 1)), columns=df.columns)输出:
A B C
0 2.0 3.0 4.0
1 2.0 3.0 4.0
2 2.0 3.0 4.0发布于 2020-01-16 13:43:52
assign
在没有检查的情况下,只需为在s中找到的所有行分配一列:
df.assign(**s)
# A B C
#0 2 3 4
#1 2 3 4
#2 2 3 4或者,只需从s创建DataFrame,并仅连接回未更新的列:
pd.concat([df[df.columns.difference(s.index)],
pd.DataFrame(s.to_dict(), index=df.index)],
axis=1)发布于 2020-01-16 12:44:14
df = df.replace(df, ser)或
df = df.apply(lambda x : ser, axis=1)示例
将pandas.DataFrame.apply与lambda function和axis = 1一起使用
>>> df = pd.DataFrame({'A':[1,4,7],'B':[2,5,8],'C':[3,6,9]})
>>> ser = pd.Series({'A':2,'B':3,'C':4})>>> df = df.apply(lambda x : ser, axis=1)>>> df
A B C
0 2 3 4
1 2 3 4
2 2 3 4第二种解决方案:
>>> df = df.replace(df, ser)
>>> df
A B C
0 2 3 4
1 2 3 4
2 2 3 4https://stackoverflow.com/questions/59762934
复制相似问题