Этот код может вам помочь. Пожалуйста, проверьте и дайте мне знать.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'node_i':[3,3,3,0,0,1,1],
'node_j':[4,2,5,2,3,2,8],
'value_i':[89,89,89,45,45,109,109],
'value_j':[33,np.nan,69,np.nan,89,np.nan,np.nan]
})
wList = []
for index,value in enumerate(df['value_j'].values):
curValueNode_i = df.iloc[index,0]
if not np.isnan(value):
wList.append(value)
else:
checkIfNaNReturns = len(df[(df['node_i']==curValueNode_i) & (df['value_j'].notnull())].iloc[:,3].values)
if (checkIfNaNReturns>0):
meanValue = np.mean(df[(df['node_i']==curValueNode_i) & (df['value_j'].notnull())].iloc[:,3].values)
wList.append(meanValue)
else:
wList.append(1)
df['w'] = wList
print(df)
'''
Output of the code:
node_i node_j value_i value_j w
0 3 4 89 33.0 33.0
1 3 2 89 NaN 51.0
2 3 5 89 69.0 69.0
3 0 2 45 NaN 89.0
4 0 3 45 89.0 89.0
5 1 2 109 NaN 1.0
6 1 8 109 NaN 1.0
'''