Python Pandas:如何从另一个csv文件更新csv文件

时间:2015-04-13 14:32:17

标签: python csv pandas

我们有两个CSV文件:a.csvb.csv

a.csv包含树列:标签 item1 item2 b.csv有两列: item1 item2 。如果a.csv中的 item1 item2 也出现在b.csv中,则a.csvb.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

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