【问题标题】:iterate the rows and join in python pandas迭代行并加入 python pandas
【发布时间】:2018-11-15 07:07:25
【问题描述】:

我有这样的主数据集

master = pd.DataFrame({'Channel':['1','1','1','1','1'],'Country':['India','Singapore','Japan','United Kingdom','Austria'],'Product':['X','6','7','X','X']})

和这样的用户表

user = pd.DataFrame({'User':['101','101','102','102','102','103','103','103','103','103'],'Country':['India','Brazil','India','Brazil','Japan','All','Austria','Japan','Singapore','United Kingdom'],'count':['2','1','3','2','1','1','1','1','1','1']})

我希望主表与每个用户的用户表左连接。像下面的一个用户

   merge_101 = pd.merge(master,user[(user.User=='101')],how='left',on=['Country'])
   merge_102 = pd.merge(master,user[(user.User=='102')],how='left',on=['Country'])
   merge_103 = pd.merge(master,user[(user.User=='103')],how='left',on=['Country'])
   merge_all = pd.concat([merge_101, merge_102,merge_103], ignore_index=True)

如何在这里迭代每个用户我首先过滤数据集并创建另一个数据集并稍后附加整个数据集。

有没有更好的方法来完成这个任务,比如 for 循环或任何连接?

谢谢

【问题讨论】:

  • 您可以复制和粘贴数据框而不是图像吗?其他人可以简单地复制和使用数据框来理解问题。另外,你能展示一下你当前和预期的输出吗?我认为不需要循环。
  • 肯定会在一段时间内添加数据帧
  • @HarvIpan 添加了数据框
  • 你能显示你的预期输出吗?您的代码有 Userid 列,但您的数据框没有 Userid 列。
  • @HarvIpan 添加了更多信息

标签: python pandas merge


【解决方案1】:

IIUC,你需要:

pd.concat([pd.merge(master,user[(user.User==x)],how='left',on=['Country']) for x in list(user['User'].unique())], ignore_index=True)

输出:

    Channel         Country Product User count
0        1           India       X  101     2
1        1       Singapore       6  NaN   NaN
2        1           Japan       7  NaN   NaN
3        1  United Kingdom       X  NaN   NaN
4        1         Austria       X  NaN   NaN
5        1           India       X  102     3
6        1       Singapore       6  NaN   NaN
7        1           Japan       7  102     1
8        1  United Kingdom       X  NaN   NaN
9        1         Austria       X  NaN   NaN
10       1           India       X  NaN   NaN
11       1       Singapore       6  103     1
12       1           Japan       7  103     1
13       1  United Kingdom       X  103     1
14       1         Austria       X  103     1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-02
    • 2015-08-24
    • 2019-04-10
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    相关资源
    最近更新 更多