我正在处理数据框df
:
0 1 2 3 4 5 6 7
2 418 -5 -81 526 NaN NaN NaN NaN
5 415 -5 -116 487 -5 116 462 -24
7 413 -5 -81 323 NaN NaN NaN NaN
我编写了一个代码来检查column 4
是否为空。如果填充4
,5
,6
,7
,其值为0
,1
,2
,{{1并添加4个具有相同值的列。
3
给定和期望的输出:
rows = df.index
for i in rows1:
if np.isnan(df.loc[i,4]):
df.loc[i,4] = df.loc[i,0]
df.loc[i,5] = df.loc[i,1]
df.loc[i,6] = df.loc[i,2]
df.loc[i,7] = df.loc[i,3]
df.loc[i,8] = df.loc[i,0]
df.loc[i,9] = df.loc[i,1]
df.loc[i,10] = df.loc[i,2]
df.loc[i,11] = df.loc[i,3]
df
我的问题: 如何优化我的代码以避免重复分配。 我试过了
0 1 2 3 4 5 6 7 8 9 10 11
2 418 -5 -81 526 418 -5 -81 526 418 -5 -81 526
5 415 -5 -116 487 -5 116 462 -24 NaN NaN NaN NaN
7 413 -5 -81 323 413 -5 -81 323 413 -5 -81 323
但它没有给出所需的结果。
答案 0 :(得分:1)
这是向量化逻辑的一种方法:
# create null test Boolean series & define replacement array
null_test = df[4].isnull()
arr = df.loc[null_test, [0, 1, 2, 3]].values
# update 4, 5, 6, 7
df.loc[null_test, [4, 5, 6, 7]] = arr
# add additional columns
df = df.join(pd.DataFrame(columns=[8, 9, 10, 11]))
# update 8, 9, 10, 11
df.loc[null_test, [8, 9, 10, 11]] = arr
print(df)
0 1 2 3 4 5 6 7 8 9 10 11
2 418 -5 -81 526 418.0 -5.0 -81.0 526.0 418 -5 -81 526
5 415 -5 -116 487 -5.0 116.0 462.0 -24.0 NaN NaN NaN NaN
7 413 -5 -81 323 413.0 -5.0 -81.0 323.0 413 -5 -81 323