У меня 2 кадра данных train и user_features. 'user_features' имеет node_id (соответствующий node1_id и node2_id в файлах train / test), представляющий пользователя, для которого у нас есть функции от f1 до f13. Я хочу преобразовать «поезд» так, чтобы он содержал функции от f1 до f13 как node1_id, так и node2_id соответственно.
train.head()
node1_id node2_id is_chat
0 8446602 6636127 0
1 1430102 7433949 0
2 2803017 8372333 0
3 4529348 894645 0
4 5096572 4211638 0
user_features.head()
node_id f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13
0 2 14 14 14 12 12 12 7 7 7 0 0 0 15
1 3 31 9 7 31 16 12 31 15 12 31 15 12 8
2 4 0 0 0 0 0 0 0 0 0 0 0 0 7
3 5 31 4 1 31 7 1 31 9 1 31 9 0 15
4 6 31 27 20 31 24 14 31 20 10 31 20 5 7
Ожидаемый преобразованный «поезд» должен быть:
train.head(1)
node1_id node2_id is_chat f1 f2 ...f13 f14 f15 ...f26
0 8446602 6636127 0 14 14 ... 31 4 1 ...10
Там, где функции f1 to f13
имеют node1_id : 8446602
и f14 to f26
имеют node2_id : 6636127
соответственно. Спасибо.
import pandas as pd
import sys
if sys.version_info[0] < 3:
from StringIO import StringIO
else:
from io import StringIO
train_data = StringIO("""node1_id node2_id is_chat
8446602 6636127 0
1430102 7433949 0
2803017 8372333 0
4529348 894645 0
5096572 4211638 0""")
features_data = StringIO("""node_id f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13
2 14 14 14 12 12 12 7 7 7 0 0 0 15
3 31 9 7 31 16 12 31 15 12 31 15 12 8
4 0 0 0 0 0 0 0 0 0 0 0 0 7
5 31 4 1 31 7 1 31 9 1 31 9 0 15
6 31 27 20 31 24 14 31 20 10 31 20 5 7""")
train_df = pd.read_csv(train_data, sep=" ")
features_df = pd.read_csv(features_data, sep=" ")