熊猫:根据另一个数据框中的值在数据框中添加新列

加分号

我有两个数据框,其中一个具有userId和gender,另一个数据框具有这些用户的在线活动。

第一个数据框 (df1)

userId, gender
001, F
002, M
003, F
004, M
005, M
006, M

第二数据框 (df2)

userId, itemClicked, ItemBought, date
001, 123182, 123212, 02/02/2016
003, 234256, 123182, 05/02/2016
005, 986834, 234256, 04/19/2016
004, 787663, 787663, 05/12/2016
020, 465738, 465738, 03/20/2016
004, 787223, 787663, 07/12/2016

我想通过基于userId查找第一个数据框来将性别列添加到第二个数据框。df2每个用户可能会有多行,因为df2是一个点击数据,而同一用户可能有多个项目。

这在MySql中很容易做到,但是我试图在熊猫中做到这一点。

for index, row in df2.iterrows():
    user_id = row['userId']
    if user_id in df1['userId']:
        t = df1.loc[df1['userId'] == user_id]
        pdb.set_trace()

这是熊猫这样的任务吗?

耶斯列尔
print (df1)
   userId gender
0       1      F
1       2      M
2       3      F
3       4      M
4       5      M
5       6      M

print (df2)
   userId  itemClicked  ItemBought        date
0       1       123182      123212  02/02/2016
1       3       234256      123182  05/02/2016
2       5       986834      234256  04/19/2016
3       4       787663      787663  05/12/2016
4      20       465738      465738  03/20/2016
5       4       787223      787663  07/12/2016

您可以使用map

df2['gender'] = df2.userId.map(df1.set_index('userId')['gender'].to_dict())

print (df2)
   userId  itemClicked  ItemBought        date gender
0       1       123182      123212  02/02/2016      F
1       3       234256      123182  05/02/2016      F
2       5       986834      234256  04/19/2016      M
3       4       787663      787663  05/12/2016      M
4      20       465738      465738  03/20/2016    NaN
5       4       787223      787663  07/12/2016      M

如果两个DataFrames中只有一列相同,则可以省略merge和保留左联接参数的另一种解决方案ongender

df = pd.merge(df2, df1, how='left')

print (df)
   userId  itemClicked  ItemBought        date gender
0       1       123182      123212  02/02/2016      F
1       3       234256      123182  05/02/2016      F
2       5       986834      234256  04/19/2016      M
3       4       787663      787663  05/12/2016      M
4      20       465738      465738  03/20/2016    NaN
5       4       787223      787663  07/12/2016      M

时间

#len(df2) = 600k
df2 = pd.concat([df2]*100000).reset_index(drop=True)

def f(df1,df2):
    df2['gender'] = df2.userId.map(df1.set_index('userId')['gender'].to_dict())
    return df2


In [43]: %timeit f(df1,df2)
10 loops, best of 3: 34.2 ms per loop

In [44]: %timeit (pd.merge(df2, df1, how='left'))
10 loops, best of 3: 102 ms per loop

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据另一个数据框的行值在数据框中添加新列

如何根据另一个数据框中的条件在数据框中创建新列?

根据熊猫中的另一个数据框更改列中的值

根据熊猫中另一个数据框的相似值在数据框中填充一列

在数据框中添加新列以对另一个数据框中的行进行计数

根据与另一个数据框的匹配在数据框中创建新列

熊猫根据另一个数据框中的匹配列填充新的数据框列

R-根据另一个数据框的列中的值满足的条件,在数据框列中添加值(由公式得出)

根据另一个数据框中的现有值在数据框中添加一列

根据与另一个数据框中的值匹配的行数创建新列

根据另一个数据框中的值将列添加到数据框中

语言:如何根据另一个数据框在数据框中创建新列?

根据另一个数据框计算数据框中的列值

根据另一个数据框在数据框中展开行并添加列

根据另一个数据框向熊猫数据框列添加值

Pyspark:使用udf根据另一个数据框中的值向数据框中添加新列

根据熊猫中另一列上的值在数据框中创建一个新列

根据关键列值熊猫将一个数据框中的行与另一个数据框中的行匹配

使用 R 中另一个数据框中的值在数据框中创建新变量

根据另一个数据框中的值在数据框中创建列表列

熊猫:根据条件将数据框中的值替换为另一个数据框中的值

根据另一个数据框/列表在数据框中的列子集

大熊猫使用另一个数据框列在数据框列中填充NaN

根据另一个数据框中的最近位置填充熊猫数据框中的缺失值

根据另一个数据框中的相应值更改熊猫数据框中的值

根据另一个数据框值从熊猫数据框的行中删除系列值

如何根据另一个数据框中的查找值替换熊猫数据框值?

根据条件从另一个数据框的值向数据框添加新列

搜索和查找从另一个数据框中的一个数据框中搜索值,并根据熊猫中的查找值填充新列