programing

python에서 DataFrame의 각 열에 0이 아닌 값 계산

telecom 2023. 9. 17. 12:08
반응형

python에서 DataFrame의 각 열에 0이 아닌 값 계산

첫 번째 열이 다음과 같은 python-pandas-DataFrame을 가지고 있습니다."user_id"나머지 열은 태그()입니다."Tag_0"로."Tag_122").

저는 다음과 같은 형식의 데이터를 가지고 있습니다.

UserId  Tag_0   Tag_1
7867688 0   5
7867688 0   3
7867688 3   0
7867688 3.5 3.5
7867688 4   4
7867688 3.5 0

나의 목표는 성취하는 것입니다.Sum(Tag)/Count(NonZero(Tags))각 user_id에 대해

df.groupby('user_id').sum(), 나를 줍니다sum(tag), 그러나 0이 아닌 값을 세는 것에 대해서는 전혀 모릅니다.

그것이 가능한가요?Sum(Tag)/Count(NonZero(Tags))한 명령으로?

MySQL에서는 다음과 같이 달성할 수 있습니다.

select user_id, sum(tag)/count(nullif(tag,0)) from table group by 1

어떤 도움이라도 감사히 받겠습니다.

각 열의 0이 아닌 개수를 얻는 방법 중 가장 좋아하는 것은

df.astype(bool).sum(axis=0)

각 행에서 0이 아닌 개수를 사용합니다.

df.astype(bool).sum(axis=1)

(Skulas 덕분에)

만약 당신의 df에 nan이 있다면 당신은 먼저 0을 만들어야 합니다. 그렇지 않으면 1로 계산됩니다.

df.fillna(0).astype(bool).sum(axis=1)

(C경님께 감사드립니다)

사용하지 않는 이유np.count_nonzero?

  1. 전체 데이터 프레임의 0이 아닌 개수를 계산하려면,np.count_nonzero(df)
  2. 모든 행의 0이 아닌 개수를 세는 방법np.count_nonzero(df, axis=0)
  3. 모든 열의 0이 아닌 개수를 세는 방법np.count_nonzero(df, axis=1)

날짜에도 적용됩니다.

0이 아닌 값을 계산하려면 다음 작업을 수행합니다.(column!=0).sum(),어디에column원하는 데이터입니다.column != 0부울 배열을 반환하고 True는 1이고 False는 0이므로 이를 합하면 조건과 일치하는 요소의 수를 얻을 수 있습니다.

그래서 당신이 원하는 결과를 얻기 위해서, 하시오.

df.groupby('user_id').apply(lambda column: column.sum()/(column != 0).sum())

이 질문이 오래된 것은 알지만 OP의 목표는 질문 제목과 다른 것 같습니다.

각 user_id에 대한 합계(Tag)/카운트(NonZero(Tags))를 달성하는 것이 목표입니다...


OP의 목적을 위해 0을 NaN으로 대체하여 사용할 수 있습니다.groupby+mean(이것은 효과가 있습니다.mean기본적으로 NaN 생략):

out = df.replace(0, np.nan).groupby('UserId', as_index=False).mean()

출력:

    UserId  Tag_0  Tag_1
0  7867688    3.5  3.875

df의 각 열에서 0이 아닌 값의 개수를 구하는 간단한 목록 이해:

[np.count_nonzero(df[x]) for x in df.columns]

언급URL : https://stackoverflow.com/questions/26053849/counting-non-zero-values-in-each-column-of-a-dataframe-in-python

반응형