开发者社区> 问答> 正文

从数据框python中删除一行中的重复数据,而不会影响DataFrame的形状

有一个数据框:

<!-- begin snippet: js hide: false console: true babel: false -->


> ==> index   A  B
>       0     1  10
>       1     1  20
>       2     1  30 
>       3     2  10

我想从A列中删除重复项,但数据框的形状不受影响。

结果O / p为

> ==> Index  A  B

>       0       10

>       1    1  20

>       2       30

>       3    2  10

如何完成此任务。

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 22:41:16 495 0
1 条回答
写回答
取消 提交回答
  • 如下所示,您可以选择重复的感兴趣的行和列('A'),并将其值设置为NAN。

    # create df
    
    df = pd.DataFrame([
        [1, 10],
        [1, 20],
        [1, 30],
        [2, 10]],
        columns=['A', 'B'])
    
    # replace duplicated elements with NAN, preserving the row
    
    df.loc[df.duplicated(subset='A', keep='first'), 'A'] = np.nan
    

    原始表:

        A   B
    0   1   10
    1   1   20
    2   1   30
    3   2   10
    

    修改表:

        A     B
    0   1.0   10
    1   NaN   20
    2   NaN   30
    3   2.0   10
    

    列“ A”成为支持NaN的浮点数据类型。

    使用duplicated,您可以将元素的第一个(keep ='first')或最后一个(keep ='last')指定为原始元素-就像其他元素一样-将其他相同元素视为重复元素。

    与@Quang Hoang的评论有关,在duplicated中没有逻辑来选择任意中间元素,如您的示例。

    ************回应之后************回应之后,我想我知道您想要什么。以下是非矢量化方法,只要您的数据帧不是很大,就应该很好。它将重复的B值保存到列表中(见下文)

    # create sample dataframe
    
    df = pd.DataFrame([
        [1, 10],
        [1, 20],
        [1, 30],
        [2, 10],
        [3, 15],
        [3, 20]],
        columns=['A', 'B'])
    
    # create a dictionary where unique column A values are keys, and values are all the column B values for a given key (whether the A value is a duplicate or not)
    
    dictionary = dict()
    
    for value in df.A.unique():
        if len(df.loc[(df.A == value) & df.A.duplicated(keep=False)]) > 0:
            all_values = df.loc[(df.A == value) & df.A.duplicated(keep=False), 'B'].tolist()
            dictionary[value] = all_values
        elif len(df.loc[(df.A == value) & df.A.duplicated(keep=False)]) == 0:
            dictionary[value] = df.loc[(df.A == value), 'B'].tolist()
    
    # make a new dataframe
    
    df2 = pd.DataFrame(columns=['A', 'B'])
    df2.A = list(dictionary.keys())
    df2.B = list(dictionary.values())
    

    结果是这样的:

        A    B
    0   1   [10, 20, 30]
    1   2   [10]
    2   3   [15, 20]
    

    如果您想删除原始数据帧以释放内存:del df

    回答来源:stackoverflow

    2020-03-24 22:41:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载