我们有两个CSV文件:a.csv
和b.csv
。
a.csv
包含树列:标签, item1 , item2 。 b.csv
有两列: item1 , item2 。如果a.csv
中的 item1 和 item2 也出现在b.csv
中,则a.csv
和b.csv
具有相同的 item1 和 item2 ,a.csv
中的标签值应为 1 。如何使用熊猫来处理?
例如:
a.csv:
label item1 item2
0 123 35
0 342 721
0 876 243
b.csv:
item1 item2
12 35
32 721
876 243
result.csv:
label item1 item2
0 123 35
0 342 721
1 876 243
我试过这个,但它不起作用:
import pandas as pd
df1 = pd.read_csv("~/train_dataset.csv", names=['label', 'user_id', 'item_id', 'behavior_type', 'user_geohash', 'item_category', 'time','sales'], parse_dates=True)
df2 = pd.read_csv(~/train_user.csv", names=['user_id', 'item_id', 'behavior_type', 'user_geohash', 'item_category', 'time', 'sales'], parse_dates=True)
df1.loc[(df1['user_id'] == df2['user_id'])& (df1['item_id'] == df2['item_id']), 'label'] = 1
答案 0 :(得分:0)
您可以使用loc
和布尔条件来屏蔽您的df(此处代表a.csv)并在满足条件时将标签设置为1:
In [18]:
df.loc[(df['item1'] == df1['item1'])& (df['item2'] == df1['item2']), 'label'] = 1
df
Out[18]:
label item1 item2
0 0 123 35
1 0 342 721
2 1 876 243
如果要设置所有行值,可以使用np.where
:
In [19]:
np.where((df['item1'] == df1['item1'])& (df['item2'] == df1['item2']), 1, 0)
Out[19]:
array([0, 0, 1])
In [20]:
df['label'] = np.where((df['item1'] == df1['item1'])& (df['item2'] == df1['item2']), 1, 0)
df
Out[20]:
label item1 item2
0 0 123 35
1 0 342 721
2 1 876 243