【问题标题】:how to counting True and False of Multiindex in pandas?如何计算熊猫中Multiindex的真假?
【发布时间】:2018-12-12 10:24:23
【问题描述】:

我在 pandas 中使用多索引。

示例 1:

'info'       '2002'     '2003'     '2004'
'PID' 'Age'  't1' 't2'  't1' 't2'  't1' 't2'
 101   30     Nan  2     2    1     Nan  Nan
 102   28     2    5     1    Nan   10   100   

我也想知道有多少东西值得。

[num] 和 [num] 为真

[Nan] 和 [num] 为真

[Nan] 和 [Nan] 为假

示例 2:

'info'       
'PID' 'Age' 'count' 
 101   30      2
 102   28      3

所以我认为使用 any(),但我没有解决它。

【问题讨论】:

  • df.index 是什么?

标签: python python-3.x pandas count multi-index


【解决方案1】:

我认为如果MultiIndex 也需要在索引中首先检查所有值的notna,然后通过DataFrameGroupBy.any 和最后一次计数Trues 通过sum 在列中检查每个第一级MultiIndex 至少一个:

print (df.index)
MultiIndex(levels=[[101, 102], [28, 30]],
           labels=[[0, 1], [1, 0]])

df = df.notna().groupby(axis=1, level=0).any().sum(axis=1)
#oldier pandas versions
#df = df.notnull().groupby(axis=1, level=0).any().sum(axis=1)

如果索引中没有MultiIndex,则添加drop 以删除info 级别:

print (df.index)
RangeIndex(start=0, stop=2, step=1)

s = df.drop('info', level=0, axis=1).notnull().groupby(axis=1, level=0).any().sum(axis=1)
print (s)
0    2
1    3
dtype: int64

如果需要按位置创建列,请使用insert:

df.insert(2, ('info','count'), s)
print (df)
   info             '2002'      '2003'      '2004'       
  'PID' 'Age' count   't1' 't2'   't1' 't2'   't1'   't2'
0   101    30     2    NaN    2      2  1.0    NaN    NaN
1   102    28     3    2.0    5      1  NaN   10.0  100.0

【讨论】:

  • 哇...您的回答帮了大忙!我可以问更多问题吗?
  • @GihunJoo - 当然,来吧:)
  • 我想将计数值表示为一个列表。如果要将数字的频率表示为列表怎么办?
  • @GihunJoo - 很简单,加s.tolist()
  • 但是df.index 是什么?
猜你喜欢
  • 2015-11-29
  • 2017-06-13
  • 2016-09-02
  • 2013-06-06
  • 1970-01-01
  • 2015-09-13
  • 2021-12-06
  • 2013-04-11
  • 1970-01-01
相关资源
最近更新 更多