【问题标题】:Python Pandas - Conditional JoinPython Pandas - 条件连接
【发布时间】:2023-04-07 17:51:01
【问题描述】:

我想从 Python 中已有的 DataFrame 创建一个 DataFrame。

我拥有的 DataFrame 如下所示:

Nome    Dept
Maria   A1
Joao    A2
Anna    A1
Jorge   A3

我要创建的 DataFrame 如下所示:

Dept    Funcionario 1      Funcionario 2
A1          Maria              Anna
A2          Joao    

我尝试了以下代码:

df_func.merge(df_dept, how='inner', on='Dept')

但我得到了错误:TypeError: merge() got multiple values for argument 'how'

有人知道我该怎么做吗?

提前感谢您! :)

【问题讨论】:

  • df_func 是你的第一张桌子吗?如果不是,它应该是。 first_table.merge(second_table, how=“Inner” on=“dept”) - 您已经说明了原始表的名称,所以这只是一个假设。
  • 我改变了,它加入了两个表,但我想让 dept 表作为主要表,另一个根据部门填充 dept 表,如员工 1 和员工 2。
  • pd.merge(df_dept,df_func,on='Dept',how='inner') 产生了什么?
  • 什么是 Python 中的“表”?我不熟悉这种数据类型。你是说 Pandas DataFrame 吗?
  • 是的,它是一个数据框,对不起,我要修复它。

标签: python python-3.x pandas join


【解决方案1】:

即使你尝试了它并且它有效,你也不会得到正确的答案。事实上,密钥会被复制 4 次。

{'Name': ['maria', 'joao', 'anna', 'jorge'], 'dept': [1, 2, 1, 3]}
{'Name': ['maria', 'joao', 'anna', 'jorge'], 'dept': [1, 2, 1, 3]}
d = _
df = pd.DataFrame(d)
df.merge(df, how='inner', on='dept')

Out[8]: 
  Name_x  dept Name_y
0  maria     1  maria
1  maria     1   anna
2   anna     1  maria
3   anna     1   anna
4   joao     2   joao
5  jorge     3  jorge

最好的办法是groupby

dd = df.groupby('dept').agg(list)
Out[10]: 
               Name
dept               
1     [maria, anna]
2            [joao]
3           [jorge]

那你申请pd.Series

dd['Name'].apply(pd.Series)

Out[21]: 
          0     1
dept             
1     maria  anna
2      joao   NaN
3     jorge   NaN

【讨论】:

  • 这是我需要的。太感谢了!你帮了我很多。
【解决方案2】:

这就是我最近合并两个数据框的方式。

rpt_data = connect_to_presto() # returned data from a db
df_rpt = pd.DataFrame(rpt_data, columns=["domain", "revenue"])

""" adding sellers.json seller {} into a panads df """
sj_data = data # returned response from requests module
df_sj = pd.json_normalize(sj_data, record_path="sellers", errors="ignore")

""" merging both dataframes """
df_merged = df_rpt.merge(df_sj, how="inner", on="domain", indicator=True)

注意我是如何每次都将数据存储到一个变量中,然后从中创建一个 DataFrame 的?然后像这样合并它们

df_merged = df_rpt.merge(df_sj, how="inner", on="domain", indicator=True)

这可能不是最好的方法,但确实有效。

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 2018-06-14
    • 2018-05-23
    • 1970-01-01
    相关资源
    最近更新 更多