Python DF: Как выбрать значения в нескольких столбцах для одной строки в зависимости от условий? - PullRequest
0 голосов
/ 25 апреля 2019

Здесь у меня есть набор данных с несколькими кодами для одной записи.Мне нужно подобрать коды, начинающиеся с '6', и поместить их в новый столбец для каждой записи.

Датафрейм выглядит следующим образом:

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']

, но я не совсем уверен, как запустить fuction для всех 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

Заранее спасибо!

1 Ответ

0 голосов
/ 25 апреля 2019

Вы можете попробовать это

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)

Я надеюсь, что это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...