【问题标题】:Keep one column in df2 based on value in df1根据 df1 中的值在 df2 中保留一列
【发布时间】:2021-04-07 19:53:05
【问题描述】:

假设我有两个数据框:

data = {'model':  ['B']}
df1 = pd.DataFrame (data, columns = ['model'])
df1

data = {'A':  ['0.55', '0.49', '0.47',],
        'B': ['0.48', '0.53', '0.54'],
        'C': ['0.50', '0.51', '0.45']}
df2 = pd.DataFrame (data, columns = ['A', 'B', 'C'])
df2

我希望 df2 只保留名称等于 df1 中的值的列。所以输出将是 df2 在数据框中只有一列 - 'B'

我该怎么做?

谢谢

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用df.isin:

    In [173]: df2 = df2[df2.columns[df2.columns.isin(df1.model)]]
    
    In [174]: df2
    Out[174]: 
          B
    0  0.48
    1  0.53
    2  0.54
    

    或: 根据@sammywemmy 的建议:

    In [213]: df2 = df2.loc[:, df2.columns.isin(df1["model"])]
    
    In [214]: df2
    Out[214]: 
          B
    0  0.48
    1  0.53
    2  0.54
    

    【讨论】:

    • 布尔索引也有效:df2.loc[:, df2.columns.isin(df1["model"])]
    【解决方案2】:

    你可以这样做:

    import pandas as pd
    data = {'model':  ['B']}
    df1 = pd.DataFrame (data, columns = ['model'])
    data = {'A':  ['0.55', '0.49', '0.47',],
            'B': ['0.48', '0.53', '0.54'],
            'C': ['0.50', '0.51', '0.45']}
    df2 = pd.DataFrame (data, columns = ['A', 'B', 'C'])
    outdf = df2[df1['model']]  # alternatively: outdf = df2[df1.model]
    print(outdf)
    

    输出:

          B
    0  0.48
    1  0.53
    2  0.54
    

    说明:我们可以使用 [] (getitem) 通过使用 iterable 从 pandas.DataFrame 获取某些列 - 在这种情况下,它是来自 df1pandas.Series (column) 命名为 model

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      相关资源
      最近更新 更多