它没有按预期填充

问题描述 投票:0回答:1

我有一个 pandas 分数数据框:

data_1 = {"Grad_22": [96, np.nan, np.nan], "Grad_23": [92, 97, np.nan], "Grad_24": [np.nan, 93, 95]}
df_1= pd.DataFrame(data_1)
df_1["DATE"] = pd.to_datetime(["2022-12-31","2023-12-31","2024-12-31"])
df_1.set_index("DATE", inplace=True)

            Grad_22  Grad_23  Grad_24
DATE                                 
2022-12-31     96.0     92.0      NaN
2023-12-31      NaN     97.0     93.0
2024-12-31      NaN      NaN     95.0

我还有一个按年份排列的毕业生数据框:

data_2 = {
    "Sr": ["Grad_22","Grad_23"],
    "Jr": ["Grad_23","Grad_24"]
}
df_2 = pd.DataFrame(data_2)
df_2["DATE"] = pd.to_datetime(["2022-12-31","2023-12-31"])
df_2.set_index("DATE", inplace=True)

                 Sr       Jr
DATE                        
2022-12-31  Grad_22  Grad_23
2023-12-31  Grad_23  Grad_24

我想使用 df_2 中的行作为 df_1 的标签来填充 df_3

data_3= {"Sr": [0, 0], "Jr": [0, 0]}
df_3 = pd.DataFrame(data_3)
df_3 ["DATE"] = pd.to_datetime(["2022-12-31","2023-12-31"])
df_3.set_index("DATE", inplace=True)
print(df_3)
'''



Iterrows seems perfect for this:

'''
for index, row in df_2.iterrows():
    df_3.loc[index] = df_1.loc[index, row] 
print(df_3)

我希望:

                Sr       Jr
DATE                        
2022-12-31  96.0  92.0
2023-12-31  97.0  93.0

相反,我得到:

                Sr       Jr
DATE              
2022-12-31 NaN NaN
2023-12-31 NaN NaN

我应该如何分配给 df_3 以及为什么我得到 NaN?

python pandas for-loop variable-assignment
1个回答
0
投票

原因很简单,因为你的索引没有在列上对齐。

您需要使用底层的 numpy 数组:

df_3 = df_2.copy()

for index, row in df_2.iterrows():
    df_3.loc[index] = df_1.loc[index, row].values
© www.soinside.com 2019 - 2024. All rights reserved.