При очистке данных Pandas для назначения записей ниже строки назначается определенное значение - PullRequest
0 голосов
/ 20 октября 2019

В приведенном ниже коде я использую простую манипуляцию данными для разделения столбцов и удаления ненужных символов.

input_uni_towns = pd.read_fwf("university_towns.txt", sep = " ", header = None)
uni_towns = input_uni_towns.rename(columns={0: "Raw_data"})
uni_towns['Cleaned'] = uni_towns["Raw_data"].replace(regex=True,to_replace=[r'\[[^()]*\]'],value=r'')
uni_towns[["State","University"]] = uni_towns.Cleaned.str.split("(",n=1,expand=True) 
uni_towns["University"] = uni_towns["University"].str.rstrip(')')
cleaned_uni_towns = uni_towns[["State","University"]]

После этого шага выше я хочу назначить State для записей, чья запись выше имеет Noneназначен на это. Например, текущим состоянием Оберн (Университет Оберн) является Оберн, но я хочу, чтобы это было обновлено до Алабамы и аналогично для записей ниже Алабамы, пока код не встретит следующее государство, то есть Аляска

Это текущий вывод Current Output

Это ожидаемый результат

Expected  Output

1 Ответ

1 голос
/ 20 октября 2019

Вы можете оставить NaN в штате, когда университет не None (то есть, это строка с университетом), а затем заполнить NaN в штате самым последним не-1004 * значением.

df = pd.DataFrame({'Cleaned': ['Alabama', 'Auburn (Auburn University)', 'Alaska']})
df[['State', 'University']] = df.Cleaned.str.split('(', n = 1, expand = True)
df.University = df.University.str.rstrip(')')

df.State = np.where(df.University.map(lambda u: u is None), df.State, np.nan)
df.State = df.State.fillna(method = 'ffill')
...