带 pd 的作业.数据帧.loc.



我正在处理一个数据帧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是否为空。如果为 true,则45670123的值填充,并添加 4 个具有相同值的列。

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

我的问题:如何优化我的代码以避免重复作业。 我试过了

df.loc[i,4:7]=df.loc[i,0:3]
df.loc[i,8:11]=df.loc[i,0:3]

但它没有给出预期的结果。

这是矢量化逻辑的一种方法:

# 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

最新更新