Pandas 데이터 프레임의 다른 열을 기준으로 결 측값을 채우는 방법은 무엇입니까?


19

세 번째 열에 결 측값이 포함 된 5 * 3 데이터 프레임이 있다고 가정합니다.

1 2 3
4 5 NaN
7 8 9
3 2 NaN
5 6 NaN

첫 번째 제품 두 번째 열인 결 측값 기반 규칙에 대한 값을 생성하려고합니다.

1 2 3
4 5 20 <--4*5
7 8 9
3 2 6 <-- 3*2
5 6 30 <-- 5*6

데이터 프레임을 어떻게 사용합니까? 감사.

이와 같은 결 측값을 계산하는 조건을 추가하는 방법은 무엇입니까?

if 1st % 2 == 0 then 3rd = 1st * 2nd else 3rd = 1st + 2nd

1 2 3
4 5 20 <-- 4*5 because 4%2==0
7 8 9
3 2 5 <-- 3+2 because 3%2==1
5 6 11 <-- 5+6 because 5%2==1

크기가 같지 않기 때문에 이렇게 할 수 없습니다
Mayur Dangar

답을 넓힐 수 있습니까? 왜 불가능하고 문제를 해결하기 위해 무엇을 할 수 있습니까?
Damian Melniczuk

이봐 나도 같은 질문이 있습니다. 그러나 내가 다루는 데이터가 텍스트 인 경우 어떻게해야합니까? 즉, ''성분 '에 닭고기가 들어 있으면'type '= 비 채식'과 같은 조건입니다.
user7389747

답변:


17

당신의 dataframe의 세 개의 열이되어 가정 a, b그리고 c. 이것은 당신이 원하는 것입니다 :

df['c'] = df.apply(
    lambda row: row['a']*row['b'] if np.isnan(row['c']) else row['c'],
    axis=1
)

전체 코드 :

df = pd.DataFrame(
    np.array([[1, 2, 3], [4, 5, np.nan], [7, 8, 9], [3, 2, np.nan], [5, 6, np.nan]]), 
    columns=['a', 'b', 'c']
)
df['c'] = df.apply(
    lambda row: row['a']*row['b'] if np.isnan(row['c']) else row['c'],
    axis=1
)

몇 년 늦었지만 열이 숫자 인 경우에만 작동합니다. np.isnan숫자가 아닌 데이터를 지원하지 않습니다. OP에 숫자 열과 산술 연산이 있었기 때문에 문제가되지 않지만 pd.isnull더 나은 대안입니다.
Adarsh ​​Chavakula

3

다른 옵션 :

df.loc[(pd.isnull(df.C)), 'C'] = df.A * df.B


3

fillna()데이터 프레임 의 방법을 사용하는 것은 어떻습니까?

df['C'].fillna(df.A * df.B)


2

당신의 dataframe의 3 열이 있다고 가정하면 a, bc. 그런 다음 다음과 같이 필요한 작업을 수행 할 수 있습니다.

values = df['a'] * df['b']
df['c'] = values.where(df['c'] == np.nan, others=df['c'])

1
또는np.where(pd.isnull(df.c), df.a * df.b, df.c)
Valentas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.