【问题标题】:Python DF: How to select values in multiple columns for one row based on conditions?Python DF:如何根据条件为一行选择多列中的值?
【发布时间】:2019-04-25 16:53:19
【问题描述】:

这里我有一个数据集,其中一条记录有多个代码。我需要提取以“6”开头的代码并将它们放入每条记录的新列中。

Dataframe 如下所示:

ID   Code1   Code2   Code3   Code4   Code5   Code6
1    64774    NaN     NaN     NaN     NaN     NaN
2    60240   95868    NaN     NaN     NaN     NaN
3    36500   60500   95867    NaN     NaN     NaN
4    19125   19301   36500    NaN     NaN     NaN
5    36500   60500   60520    95868   95869   NaN
6    31528   31622   36500    43235   60500   60520   
# Create the dataframe
d = {'ID': ['1', '2', '3', '4', '5', '6'], 
     'Code1': ['64774','60240','36500','19125','36500','31528'],
     'Code2': [np.nan,'95868','60500','19301','60500','31622'],
     'Code3': [np.nan,np.nan,'95867','36500','60520','36500'],
     'Code4': [np.nan,np.nan,np.nan,np.nan,'95868','43235'],
     'Code5': [np.nan,np.nan,np.nan,np.nan,'95869','60500'],
     'Code6': [np.nan,np.nan,np.nan,np.nan,np.nan,'60520'],
     } 
df = pd.DataFrame(data=d)

我想到了循环或函数,例如:

def myfunc(row):
    if row['Code1'].str.startswith('6'):
       return row['Code1']

但我不太确定如何在一个函数中运行所有 6 列(Code1 - Code6)的函数,并将所有选定的代码放在一起作为 1 个值。

我正在寻找的是:

ID   Code1   Code2   Code3   Code4   Code5   Code6      New_Col
1    64774    NaN     NaN     NaN     NaN     NaN        64774
2    60240   95868    NaN     NaN     NaN     NaN        60240
3    36500   60500   95867    NaN     NaN     NaN        60500
4    19125   19301   36500    NaN     NaN     NaN         NaN
5    36500   60500   60520    95868   95869   NaN      60500, 60520
6    31528   31622   36500    43235   60500   60520    60500, 60520

提前致谢!

【问题讨论】:

    标签: python string dataframe


    【解决方案1】:

    你可以试试这个

    d = {'ID': ['1', '2', '3', '4', '5', '6'], 
         'Code1': ['64774','60240','36500','19125','36500','31528'],
         'Code2': [np.nan,'95868','60500','19301','60500','31622'],
         'Code3': [np.nan,np.nan,'95867','36500','60520','36500'],
         'Code4': [np.nan,np.nan,np.nan,np.nan,'95868','43235'],
         'Code5': [np.nan,np.nan,np.nan,np.nan,'95869','60500'],
         'Code6': [np.nan,np.nan,np.nan,np.nan,np.nan,'60520'],
         } 
    
    df = pd.DataFrame(data=d)
    
    df['Code7'] = [[] for _ in range(len(df))]
    
    
    for i in df.index : 
      row = df.drop('ID',axis=1).copy().loc[i]
      for val in row : 
          if isinstance(val,str) and val.startswith('6') : 
            df.Code7[i].append(val)
    
    print(df)
    

    希望对你有帮助

    【讨论】:

    • 非常感谢!有用!!只是想知道,是否有办法摆脱括号并只将数字保留在新列中?
    • 这只是 python 打印列表的方式,你可以使用这样的东西:for i, row in df.iterrows() : print(",".join(str(x) for x in row.Code7))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2020-10-24
    • 2016-11-02
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多