【问题标题】:match column values and replace duplicates with ' ' python匹配列值并用''python替换重复项
【发布时间】:2017-10-26 23:12:45
【问题描述】:

我有 3 列,如下所示,pandas dataframe 中的标题为 screen_name, screen_name_retweet , screen_name_mention

screenName      screen_name_retweet     screen_name_mention
User1                 User10                      User1
User4                 User10                      User5
User3                 User3                       User12
User6                 User10                      User7

如果在screen_name and screen_name_retweet or screen_name_mention 之间发现重复项,我想要将screen_namescreen_name_retweetscreen_name_mention 匹配,将该列(screen_name_retweet and screen_name_mention) 值替换为''。所以上面的列应该是这样的

 screenName     screen_name_retweet     screen_name_mention
    User1                 User10                      
    User4                 User10                      User5
    User3                                             User12
    User6                 User10                      User7

我怎样才能得到想要的答案?

更新:

我已经试过了:

df.loc[(df['screenName'].duplicated() & df['screen_name_mention'].duplicated()), ['screen_name_mention']] = ''

但没有任何反应,桌子保持不变

【问题讨论】:

  • 一如既往,您尝试过什么?还有,你怎么拥有它?一个文本文件,一个 python 列表,还有别的什么?提示,列表推导可能是你的朋友...
  • 我总是在发布问题之前尝试(我也包含代码),但我找不到类似的东西,而且我有点着急。我在 excel 表中有它并使用 panda 作为数据框加载 csv 文件
  • 让我也检查一下列表理解
  • 如果不列出理解,如果检查也可能有帮助..

标签: python pandas dataframe


【解决方案1】:

使用replace方法

import pandas as pd
df = pd.read_csv(file_name)          #read your file as dataframe
for index, row in df.iterrows():
    if row[0]==row[1]:
        df['screen_name_retweet'].replace(row[1], "", inplace = True)
    if row[0] == row[2]:
        df['screen_name_mention'].replace(row[2], "", inplace = True)
print(df)          

【讨论】:

    【解决方案2】:
    import pandas as pd
    a = pd.DataFrame([["user1","user10","user1"],
                      ["user4","user10","user5"],
                      ["user3","user3","user12"]] ,
                      columns=["i1","i2","i3"]) #simplified input dataframe
    for i in a.index:
        m = a.loc[i].duplicated() #mask array for each rows
        a.loc[i] = a.loc[i].mask(m).fillna("") #filter duplicates and fill by empty string
    

    我认为从性能的角度来看,这个解决方案可以改进,但它确实有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 2019-04-02
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多