따라서 다음 샘플 데이터 프레임이 있습니다(명확성/단순성을 위해 하나의 행만 포함).
df = pd.DataFrame({'base_number': [2],
'std_dev': [1]})
df['amount_needed'] = 5
df['upper_bound'] = df['base_number'] + df['std_dev']
df['lower_bound'] = df['base_number'] - df['std_dev']
주어진 각 행에 대해 행당 총 금액이 주어진 숫자 df['amount_needed']
(이 예에서는 5)가 되도록 행 수를 생성하고 싶습니다 . 나는 그 5개의 새로운 행이 df['upper_bound']
및 에 의해 주어진 스펙트럼에 걸쳐 퍼지기를 원합니다 df['lower_bound']
. 따라서 위의 예에서 다음 결과를 출력으로 원합니다.
df_new = pd.DataFrame({'base_number': [1, 1.5, 2, 2.5, 3]})
물론 이 프로세스는 이 특정 문제와 관련이 없는 다른 많은 열과 함께 훨씬 더 큰 데이터 프레임의 모든 행에 대해 수행되므로 이 프로세스를 자동화하는 방법을 찾으려고 합니다.
jsmart의 기여를 사용하여 새 데이터 프레임을 생성하기 위해 작업하고 필요에 따라 id에 따라 이전 열의 다른 열을 이 새 열로 병합하기 위해 원래 ID를 보존했습니다(전체 프로세스는 아래에 표시됨).
amount_needed = 5
df = pd.DataFrame({'base_number': [2, 4, 8, 0],
'std_dev': [1, 2, 3, 0]})
df['amount_needed'] = amount_needed
df['upper_bound'] = df['base_number'] + df['std_dev']
df['lower_bound'] = df['base_number'] - df['std_dev']
s1 = pd.Series([],dtype = int)
for row in df.itertuples():
arr = np.linspace(row.lower_bound,
row.upper_bound,
row.amount_needed)
s = pd.Series(arr).rename('base_number')
s1 = pd.concat([s1, s])
df_new = pd.DataFrame({'base_number': s1})
ids_og = list(range(1, len(df) + 1))
ids_og = [ids_og] * amount_needed
ids_og = sorted(list(itertools.chain.from_iterable(ids_og)))
df_new['id'] = ids_og
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다