我有一个用Index和列编写的pandas DataFrame,所有值都是NaN。 现在我计算了一个结果,它可以用于DataFrame的多行,我想一次性分配它们。这可以通过循环完成,但我很确定这个赋值可以立即完成。
以下是一个场景:
import pandas as pd
df = pd.DataFrame(index=['A', 'B', 'C'], columns=['C1', 'C2']) # original df
s = pd.Series({'C1': 1, 'C2': 'ham'}) # a computed result
index = pd.Index(['A', 'C']) # result is valid for rows 'A' and 'C'
天真的方法是
df.loc[index, :] = s
但这根本不会改变DataFrame。它仍然是
C1 C2
A NaN NaN
B NaN NaN
C NaN NaN
如何完成这项任务?
答案 0 :(得分:7)
似乎我们可以使用底层数组数据来分配 -
df.loc[index, :] = s.values
现在,假设s
中的索引顺序与df
的列中的索引顺序相同。如果不是suggested by @Nras
,我们可以使用s[df.columns].values
进行右侧分配。