【问题标题】:add new column and remove duplicates in that replace null values column wise添加新列并删除重复列替换空值列
【发布时间】:2016-08-18 03:06:17
【问题描述】:
Duplication type:
Check this column only (default)
Check other columns only
Check all columns

Use Last Value:
True - retain the last duplicate value
False - retain the first of the duplicates (default)

此规则应向数据框中添加一个新列,该列包含与任何唯一列的源列相同的列,并且任何重复列都为空。

基本代码是 df.loc[df.duplicated(),get_unique_column_name(df, "clean")] = df[get_column_name(df, column)],根据复制类型设置duplicated()的参数

请参阅上面此函数的参考:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.duplicated.html

您应该根据duplication_type的设置来指定subset参数中的列

您应该根据上面的 use_last_value 指定 use_last_value

这是我的文件。

Jason   Miller  42  4   25
Tina    Ali     36  31  57
Jake    Milner  24  2   62
Jason   Miller  42  4   25
Jake    Milner  24  2   62
Amy     Cooze   73  3   70
Jason   Miller  42  4   25
Jason   Miller  42  4   25
Jake    Milner  24  2   62
Jake    Miller  42  4   25

我想通过在下面的文件中使用 pandas.in 来获得这样的结果,我选择了 2 列。

Jason   Miller  42  4   25
Jake    Ali     36  31  57
Jake    Milner  24  2   62
Jason   Miller      4   25
Jake    Milner      2   62
Jake    Cooze   73  3   70
Jason   Miller      4   25
Jason   Miller      4   25
Jake    Milner      2   62
Jake    Miller      4   25

请任何人回复我的问题。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以使用 DF.duplicated 并分配 C 列的值,其中第一次出现的值出现在 A 列和 B 列。

    然后您可以用空字符串填充生成的Nans 以生成所需的数据帧。

    df = pd.read_csv(data, delim_whitespace=True, header=None, names=['A','B','C','D','E'])
    df.loc[~df.duplicated(), "C'"] = df['C']
    df.fillna('', inplace=True)
    df = df[["A","B", "C'","D","E"]]
    print(df)
    
           A       B  C'   D   E
    0  Jason  Miller  42   4  25
    1   Tina     Ali  36  31  57
    2   Jake  Milner  24   2  62
    3  Jason  Miller       4  25
    4   Jake  Milner       2  62
    5    Amy   Cooze  73   3  70
    6  Jason  Miller       4  25
    7  Jason  Miller       4  25
    8   Jake  Milner       2  62
    9   Jake  Miller  42   4  25
    

    另一种方法是获取重复列的子集,并将相关列替换为空字符串。然后,您可以使用update 将数据框修改为原始的df

    In [2]: duplicated_cols = df[df.duplicated(subset=['C', 'D', 'E'])]
    
    In [3]: duplicated_cols
    Out[3]: 
           A       B   C  D   E
    3  Jason  Miller  42  4  25
    4   Jake  Milner  24  2  62
    6  Jason  Miller  42  4  25
    7  Jason  Miller  42  4  25
    8   Jake  Milner  24  2  62
    9   Jake  Miller  42  4  25
    
    In [4]: duplicated_cols.loc[:,'C'] = ''
    
    In [5]: df.update(duplicated_cols)
    
    In [6]: df
    Out[6]: 
           A       B   C     D     E
    0  Jason  Miller  42   4.0  25.0
    1   Tina     Ali  36  31.0  57.0
    2   Jake  Milner  24   2.0  62.0
    3  Jason  Miller       4.0  25.0
    4   Jake  Milner       2.0  62.0
    5    Amy   Cooze  73   3.0  70.0
    6  Jason  Miller       4.0  25.0
    7  Jason  Miller       4.0  25.0
    8   Jake  Milner       2.0  62.0
    9   Jake  Miller       4.0  25.0
    

    【讨论】:

    • 它看起来不错。但是你做了行明智。我的要求是列明智的。如下所示。Jason Miller 42 4 25 Jake Ali 36 31 57 Jake Milner 24 2 62 Jason Miller 4 25 Jake Milner 2 62杰克·库兹 73 3 70 杰森·米勒 4 25 杰森·米勒 4 25 杰克·米尔纳 2 62 杰克·米勒 4 25
    • 好的。你能用你想要的输出编辑问题吗?
    • 谢谢,我更新了我的要求。现在,你可以看到了。
    • @user6708957:如果此答案解决了您的问题,请单击复选标记考虑accepting。这向更广泛的社区表明您找到了解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2012-11-21
    • 2022-08-05
    • 2015-03-09
    • 2018-08-20
    • 1970-01-01
    相关资源
    最近更新 更多