我有一个包含三列(from,to,w)的数据框:
from to w
0 0 1 0.670820
1 0 5 0.612372
2 0 2 0.612372
3 0 3 0.577350
4 0 4 0.408248
如何根据给定的ID从两列(from,to)中获取列表中的值?例如,在上面的例子中,对于给定的id 0,列表将是[1,5,2,3,4]。
请注意,id可能出现在一列或两列中。在该示例中,如果给定的id为1,则预期列表下方将为[2,4,0,3,5]。
from to w
0 1 2 0.730297
1 1 4 0.730297
2 0 1 0.670820
3 1 3 0.516398
4 1 5 0.365148
我迭代数据框中的行以生成列表:
myarr =[]
for index, row in dftemp1.iterrows():
from_id = row['from']
to_id = row['to']
if (from_id!=target_id):
myarr.append(from_id)
if (to_id!=target_id):
myarr.append(to_id)
我想知道是否有更简单的方法来实现结果。任何帮助将不胜感激。
答案 0 :(得分:1)
使用你的第二个例子 -
df
from to w
0 1 2 0.730297
1 1 4 0.730297
2 0 1 0.670820
3 1 3 0.516398
4 1 5 0.365148
您可以argsort
前两列中的值,具体取决于值是否等于您的ID。
v = df.iloc[:, :-1].values
i = np.arange(len(df))[:, None]
j = np.argsort(v == 1, axis=1) # replace `1` with your ID
v[i, j][:, 0].tolist()
[2, 4, 0, 3, 5]