【问题标题】:how to drop duplicated columns data based on column name in pandas如何根据熊猫中的列名删除重复的列数据
【发布时间】:2017-06-15 07:47:33
【问题描述】:

假设我有一张像下面这样的表格

    A   B   C   B
0   0   1   2   3
1   4   5   6   7

我想删除 B 列。我尝试使用drop_duplicates,但它似乎只基于重复数据而不是标题。 希望有人知道如何做到这一点。

【问题讨论】:

    标签: pandas


    【解决方案1】:

    Index.duplicatedlocilocboolean indexing 一起使用:

    print (~df.columns.duplicated())
    [ True  True  True False]
    
    df = df.loc[:, ~df.columns.duplicated()]
    print (df)
       A  B  C
    0  0  1  2
    1  4  5  6
    

    df = df.iloc[:, ~df.columns.duplicated()]
    print (df)
       A  B  C
    0  0  1  2
    1  4  5  6
    

    时间安排

    np.random.seed(123)
    cols = ['A','B','C','B']
    #[1000 rows x 30 columns]
    df = pd.DataFrame(np.random.randint(10, size=(1000,30)),columns = np.random.choice(cols, 30))
    print (df)
    
    In [115]: %timeit (df.groupby(level=0, axis=1).first())
    1000 loops, best of 3: 1.48 ms per loop
    
    In [116]: %timeit (df.groupby(level=0, axis=1).mean())
    1000 loops, best of 3: 1.58 ms per loop
    
    In [117]: %timeit (df.iloc[:, ~df.columns.duplicated()])
    1000 loops, best of 3: 338 µs per loop
    
    In [118]: %timeit (df.loc[:, ~df.columns.duplicated()])
    1000 loops, best of 3: 346 µs per loop
    

    【讨论】:

    • 我肯定会和你一起去。这很直观。你立即得到了我的支持。如果您想做其他事情,我的代码字符会稍微少一些,并且更灵活一些。有用...但我更喜欢你的。
    • 发现这个老问题我正在尝试一个新函数来评估不同的时间。你怎么看?
    • @AntonvBR - 非常感谢! :)
    【解决方案2】:

    您可以groupby
    我们使用axis=1level=0 参数来指定我们按列分组。然后使用first 方法获取由唯一列名定义的每个组中的第一列。

    df.groupby(level=0, axis=1).first()
    
       A  B  C
    0  0  1  2
    1  4  5  6
    

    我们也可以使用last

    df.groupby(level=0, axis=1).last()
    
       A  B  C
    0  0  3  2
    1  4  7  6
    

    mean

    df.groupby(level=0, axis=1).mean()
    
       A  B  C
    0  0  2  2
    1  4  6  6
    

    【讨论】:

      猜你喜欢
      • 2021-04-14
      • 1970-01-01
      • 2017-10-14
      • 2021-12-02
      • 2023-01-11
      • 2012-06-19
      相关资源
      最近更新 更多