我有2个数据框train和user_features。 “ user_features”具有node_id(对应于训练/测试文件中的node1_id和node2_id),代表具有f1至f13功能的用户。我想对“火车”进行转换,使其包含node1_id和node2_id分别从f1到f13的特征。
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=" ")
答案 0 :(得分:0)
.merge()
使用left_on
和right_on
命名的参数来指定所需的合并列。
数据不明确,因此此答案考虑的是可合并的修改后的输入数据。
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
6636127 14 14 14 12 12 12 7 7 7 0 0 0 15
8446602 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=" ")
print(train_df.merge(features_df, left_on="node1_id", right_on="node_id").merge(features_df, left_on="node2_id", right_on="node_id"))