접미사 '평균'또는 '합계'가있는 열이 많이 있습니다. 때때로 '평균'접미사가있는 것은 NaN입니다. 이런 일이 발생하면 'sum'접미사가 붙은 것을 NaN으로 바꾸고 싶습니다. 많은 변수가 있으므로 루프를 사용하려면 (?)가 필요합니다. 나는 가짜 데이터 프레임을 만들었고 비슷한 게시물을 기반으로 시도한 3 가지를 여기에 추가했습니다. 불행히도 아무것도 작동하지 않았습니다.
original_data_set = (pd.DataFrame
(
{
'customerId':[1,2]
,'usage_1_sum':[100, 200]
,'usage_1_mean':[np.nan,100]
,'usage_2_sum':[420,330]
,'usage_2_mean':[45,np.nan]
}
)
)
print('original dataset')
original_data_set
desired_data_set = (pd.DataFrame
(
{
'customerId':[1,2]
,'usage_1_sum':[np.nan, 200]
,'usage_1_mean':[np.nan,100]
,'usage_2_sum':[420,np.nan]
,'usage_2_mean':[45,np.nan]
}
)
)
print('desired dataset')
desired_data_set
holder_set = original_data_set.copy()
for number in range(1,3):
holder_set['usage_{}_sum'.format(number)] = (
holder_set['usage_{}_sum'.format(number)]
.where(holder_set['usage_{}_mean'.format(number)] == np.nan, np.nan
)
)
print('using an np.where statement changed all sum variables into NaN with no discretion')
holder_set
holder_set = original_data_set.copy()
for number in range(1,3):
conditions = [holder_set['usage_{}_mean'.format(number)]==np.nan]
outcome = [np.nan]
holder_set['usage_{}_sum'.format(number)] = np.select(conditions, outcome, default=holder_set['usage_{}_sum'.format(number)])
print('using an np.select did not have any effect on the dataframe')
holder_set
holder_set = original_data_set.copy()
for number in range(1,3):
holder_set.loc[holder_set['usage_{}_mean'.format(number)]==np.nan, 'usage_{}_sum'.format(number)] = 12
print('using a loc did not have any effect on the dataframe')
holder_set
original
데이터 프레임을 df
다음 과 같이 가정합니다 .
df = pd.DataFrame({'customerId': [1, 2], 'usage_1_sum': [100, 200], 'usage_1_mean': [
np.nan, 100], 'usage_2_sum': [420, 330], 'usage_2_mean': [45, np.nan]})
사용이 Series.str.endswith
끝나는 열의 필터하기 _mean
끝나는 열의 각 열에 후 _mean
변화에 대응하는 값 _sum
을 칼럼을 NaN
평균 열 값이 어디에 NaN
:
for col in df.columns[df.columns.str.endswith('_mean')]:
df.loc[df[col].isna(), col.rstrip('_mean') + '_sum'] = np.nan
결과:
# print(df)
customerId usage_1_sum usage_1_mean usage_2_sum usage_2_mean
0 1 NaN NaN 420.0 45.0
1 2 200.0 100.0 NaN NaN
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다