【问题标题】:How to compare two data frame [duplicate]如何比较两个数据框[重复]
【发布时间】:2023-01-08 01:07:21
【问题描述】:

df1

 index           Count
 Duliajan Area      2
 HAPJAN             2
 KATHALGURI         2

df2

 Location           Category
0        NAGAJAN        0
1        JORAJAN        0
2     KATHALGURI        0
3         HEBEDA        0
4          MAKUM        0
5       BAREKURI        0
6        BAGHJAN        0
7  Duliajan Area        0
8      LANGKASHI        0
9         HAPJAN        0

我需要这个输出:

0        NAGAJAN        0
1        JORAJAN        0
2     KATHALGURI        2
3         HEBEDA        0
4          MAKUM        0
5       BAREKURI        0
6        BAGHJAN        0
7  Duliajan Area        2
8      LANGKASHI        0
9         HAPJAN        2

【问题讨论】:

  • @Corralien 它被重复覆盖,map应该在这里使用df2['Location'].map(df1.set_index('index')['Count']).fillna(df2['Count'])
  • @mozway。好的,我关闭了问题。对不起
  • @Corralien 别担心;)

标签: python python-3.x pandas dataframe csv


【解决方案1】:

你可以使用 pandas merge 函数 例如:

df2 = df2.rename(columns={"Location": "index"})
result = pd.merge(df1, df2, on="index")

【讨论】:

    【解决方案2】:

    您可以从 df1 的两列创建 dict,然后在 df2 上使用 map

    d = dict(zip(df1['index'], df1['Count']))
    df2['Category' ] = df2['Location'].map(d).fillna(0)
    print(df2)
    

    输出:

            Location  Category
    0        NAGAJAN       0.0
    1        JORAJAN       0.0
    2     KATHALGURI       2.0
    3         HEBEDA       0.0
    4          MAKUM       0.0
    5       BAREKURI       0.0
    6        BAGHJAN       0.0
    7  Duliajan Area       2.0
    8      LANGKASHI       0.0
    9         HAPJAN       2.0
    

    【讨论】:

    • 我怎样才能得到整个价值而不是浮动。
    • @venkateswaran,你是什么意思整体价值?
    • 而不是 2.0,0.0。我需要这样的 0,2
    【解决方案3】:

    连接您的数据框然后删除重复项:

    mapping = {'index': 'Location', 'Count': 'Category'}
    out = (pd.concat([df2, df1.rename(columns=mapping)])
             .drop_duplicates('Location', keep='last')
             .reset_index(drop=True))
    print(out)
    
    # Output
            Location  Category
    0        NAGAJAN         0
    1        JORAJAN         0
    2         HEBEDA         0
    3          MAKUM         0
    4       BAREKURI         0
    5        BAGHJAN         0
    6      LANGKASHI         0
    7  Duliajan Area         2
    8         HAPJAN         2
    9     KATHALGURI         2
    

    【讨论】:

      【解决方案4】:
      import pandas as pd
      
      # merge the two dataframes on the Location column
      df_merged = pd.merge(df1, df2, left_on='index', right_on='Location', how='outer')
      
      # fill missing values with 0
      df_merged = df_merged.fillna(0)
      
      # rename the columns
      df_merged = df_merged.rename(columns={'index': 'Location', 'Count': 'Count1', 'Category': 'Category1'})
      
      # print the merged dataframe
      print(df_merged)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-05
        • 2023-03-26
        • 2020-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多