【发布时间】:2019-02-12 15:45:47
【问题描述】:
我有一个数据框 df1 对应于网络中 nodes 的 egelist 和节点本身的 value,如下所示:
df
node_i node_j value_i value_j
0 3 4 89 33
1 3 2 89 NaN
2 3 5 89 69
3 0 2 45 NaN
4 0 3 45 89
5 1 2 109 NaN
6 1 8 109 NaN
如果有值,我想添加对应于value_j 的列w。如果value_j 是NaN 我想将w 设置为i 的相邻节点值的平均值。在node_i只有相邻节点的情况下,NaN的值设置为w=1。
所以最终的数据框应该是这样的:
df
node_i node_j value_i value_j w
0 3 4 89 33 33
1 3 2 89 NaN 51 # average of adjacent nodes
2 3 5 89 69 69
3 0 2 45 NaN 89 # average of adjacent nodes
4 0 3 45 89 89
5 1 2 109 NaN 1 # 1
6 1 8 109 NaN 1 # 1
我正在执行如下循环,但我想使用 apply:
nodes = pd.unique(df['node_i'])
df['w'] = 0
for i in nodes:
tmp = df[df['node_i'] == i]
avg_w = np.mean(tmp['value_j'])
if np.isnan(avg_w):
df['w'][idx] = 1
else:
tmp.ix[tmp.value_j.isnull(), 'value_j'] = avg_w ## replace NaN with values
df['w'][idx] = tmp['value_j'][idx]
【问题讨论】:
-
第 1 行和第 3 行的相邻节点是什么?
-
@sobek 第1行
node_i的相邻节点是df['node_j'][1] = 2,而第3行node_i的相邻节点是df['node_j'][3] = 2 -
不清楚你的意思是相邻节点的平均值。
-
@sobek 它们是
node_i的相邻节点。比如node_i=3的相邻节点是[4,2,5],node_i=0的相邻节点是[2,3],node_i=1的相邻节点是[2,8]