首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有一种方法可以匹配两个数据文件中的序列号,并将df2中的序列列表(从行)添加到df1的新列中(Pythonand大熊猫)

是否有一种方法可以匹配两个数据文件中的序列号,并将df2中的序列列表(从行)添加到df1的新列中(Pythonand大熊猫)
EN

Stack Overflow用户
提问于 2021-01-10 10:42:43
回答 1查看 195关注 0票数 2

作为标题,我希望生成来自df2的所有匹配序列号的列表(或其他dtype),并将它们存储在df1中的一个新列中,这样当我从df1中提取记录(产品)时,我能够找到该产品的所有评论分数。与序列号相匹配。

代码语言:javascript
运行
复制
data1 = { 'serialNumbers' : [1, 2, 3 ,4 ,5],
          'product' : ['a', 'b' , 'c', 'd', 'e']}
data2 = { 'reviewScore' : [5, 1, 4, 1, 5, 2, 4, 3, 1, 3, 4], 
          'serialNumbers' : [1, 1, 1, 1, 3, 4, 4, 2, 3, 3, 4],
          'otherData' : ['a', 'b' , 'c', 'd', 'e', 'a', 'b' , 'c', 'd', 'e','a']}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

      df1
   serialNumbers product
0              1       a
1              2       b
2              3       c
3              4       d
4              5       e


      df2
    reviewScore  serialNumbers
0             5              1
1             1              1
2             4              1
3             1              1
4             5              3
5             2              4
6             4              4
7             3              2
8             1              3
9             3              3
10            4              4



      desired output:
   serialNumbers product                   reviewData
0              1       a  [5 : a , 1 : b, 4 : c, 1 : d]
1              2       b                        [3 : c]
2              3       c          [5 : e, 1 : d, 3 : e]
3              4       d          [2 : a, 4 : b, 4 : a]
4              5       e                             []
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-10 10:50:48

您可以使用pd.mergegroupbyagg的组合

让我们详细说明以下几点:

groupby

  • The

  • 我们正在将df1df2的分组版本合并,这意味着我们要保存df1中的所有信息,并将tolist()的结果附加在d16serialNumber

>函数中,并按每个serialNumber返回所有信息。

代码语言:javascript
运行
复制
res = pd.merge(df1,(df2.groupby('serialNumbers').agg({'reviewScore':lambda x: x.tolist()})).reset_index(),how='left')

其中的指纹:

代码语言:javascript
运行
复制
   serialNumbers product   reviewScore
0              1       a  [5, 1, 4, 1]
1              2       b           [3]
2              3       c     [5, 1, 3]
3              4       d     [2, 4, 4]
4              5       e           NaN

编辑1

考虑到您最新的问题,请尝试如下:

代码语言:javascript
运行
复制
df2['temp'] = df2['reviewScore'].astype(str) + ' : ' + df2['otherData'].astype(str)
res = pd.merge(df1,(df2.groupby('serialNumbers').agg({'temp':lambda x: x.tolist()})).reset_index(),how='left')

其中的指纹:

代码语言:javascript
运行
复制
   serialNumbers product                          temp
0              1       a  [5 : a, 1 : b, 4 : c, 1 : d]
1              2       b                       [3 : c]
2              3       c         [5 : e, 1 : d, 3 : e]
3              4       d         [2 : a, 4 : b, 4 : a]
4              5       e                           NaN

请注意,我不确定这是否是最有效的方法(或最重要的琵琶方式),但我认为它可以得到你所需要的。

编辑2

代码语言:javascript
运行
复制
df2['temp1'] = df2[['reviewScore','otherData']].values.tolist()
res = pd.merge(df1,(df2.groupby('serialNumbers').agg({'temp1':lambda x: x.tolist()})).reset_index(),how='left')

   serialNumbers product                             temp1
0              1       a  [[5, a], [1, b], [4, c], [1, d]]
1              2       b                          [[3, c]]
2              3       c          [[5, e], [1, d], [3, e]]
3              4       d          [[2, a], [4, b], [4, a]]
4              5       e                               NaN
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65652356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档