【问题标题】:How to get count of nan values in one column and non nan values in other columns using pandas?如何使用 pandas 获取一列中的 nan 值和其他列中的非 nan 值的计数?
【发布时间】:2022-02-23 19:52:42
【问题描述】:

我有一个包含 4 列的数据框

column1column2column3column4 一个 2 3 6 B 3 4 南 C 5 南 6 D 7 楠楠 鄂南 5 7 F楠7楠 G楠楠9 H楠楠楠

我想在我的数据框中获取每个此类组合的计数。

预期输出:

每个组合的行数:

列 1 列 2 列 3 非楠非楠非楠

以上组合的总行数:50

同样,

列 1 列 2 列 3

Non-Nan Non-Nan Nan - 总行数:40

Non-Nan Nan Non-Nan - 总行数:50

Non-Nan Nan Nan - 总行数:70

Nan Non-Nan Non-Nan - 总行数:80

Nan Non-Nan Nan - 总行数:60

Nan Nan Non-Nan - 总行数:80

楠楠楠 - 总行数:50

【问题讨论】:

  • 你能添加预期的输出吗?

标签: python python-3.x pandas dataframe numpy


【解决方案1】:

sum过滤计数缺失/非缺失值和计数值的列:

df1 = df.drop('column1', axis=1).isna()
df = df.assign(nan = df1.sum(axis=1), nonnan = (~df1).sum(axis=1))
print (df)
  column1  column2  column3  column4  nan  nonnan
0       A      2.0      3.0      6.0    0       3
1       B      3.0      4.0      NaN    1       2
2       C      5.0      NaN      6.0    1       2
3       D      7.0      NaN      NaN    2       1
4       E      NaN      5.0      7.0    1       2
5       F      NaN      7.0      NaN    2       1
6       G      NaN      NaN      9.0    2       1
7       H      NaN      NaN      NaN    3       0

如果需要计数列:

df = df1.agg(['sum', lambda x: (~x).sum()]).rename({'sum':'nan', '<lambda>':'nonnan'})
print (df)
        column2  column3  column4
nan           4        4        4
nonnan        4        4        4

编辑:

df1 = df.drop('column1', axis=1)

df1 = (df1.fillna('nan')
          .where(df1.isna(), 'non nan')
          .groupby(df1.columns.tolist())
          .size()
          .reset_index(name='count'))
print (df1)
   column2  column3  column4  count
0      nan      nan      nan      1
1      nan      nan  non nan      1
2      nan  non nan      nan      1
3      nan  non nan  non nan      1
4  non nan      nan      nan      1
5  non nan      nan  non nan      1
6  non nan  non nan      nan      1
7  non nan  non nan  non nan      1

【讨论】:

  • 谢谢,但我想知道有多少没有。 of 行有指定的组合。
  • @VivekSukhala - 你能在问题中添加预期的输出吗?
  • 例如:23 行,colum1 nan 和 column2,column3 非 nan。(所有行的计数,你在 nan 和非 nan 列中获得的可能组合)
  • @jezrael- 我试图包含预期的输出。
  • @VivekSukhala - 你能检查编辑后的答案吗?
猜你喜欢
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 2023-03-03
  • 2014-12-03
  • 2021-11-16
  • 2017-08-25
  • 2020-11-14
相关资源
最近更新 更多