如何计算列中每个组的深度作为最大非空列数?



我有一个数据集:

id1     id2    id3    id4
a1      a2     NaN    NaN
a1      a2     a5     NaN
b1      b2     b3     b4
b1      NaN    NaN    NaN
c1      c2     NaN    NaN

我想计算每个id1非NaN的最大列数。所以期望的结果是:

id1   depth
a1     3
b1     4
c1     2

怎么做?

我创建了一些模拟数据并将其存储在df中。为了使一个列的深度计数,我们做以下操作:

import pandas as pd
import numpy as np
# create a sample dataframe
columns = ['A', 'B', 'C', 'D']
data = {
'A': ['E1', 'E2', 'E3', 'E4', 'E5'],
'B': ['Male', 'Female', 'Female', np.nan, 'Male'],
'C': [27, 24, 29, np.nan, 25],
'D': ['Accounting', np.nan, 'Accounting', np.nan, 'Sales']
}
df = pd.DataFrame(data)
ncol = 4
nrow = 5
# for just the first column
print('A', 't', 'depth')
for i in range(nrow):
count = 0
for col in columns:
if not isinstance(df[col][i], str) and np.isnan(np.asarray([df[col][i]]))[0]:
break
count += 1
print(df['A'][i], 't', count)
  1. 每一行
  2. 在0处启动计数器
  3. 对于该行中的每个元素
  4. 如果不是nan,则将计数器加1。如果它是nan,我们想要跳出循环(停止计数)。
  5. 输出:

A        depth
E1       4
E2       3
E3       4
E4       1
E5       4

这是您想要的结果吗?

df.groupby('id1').apply(lambda x: len(x.dropna(axis=1,how='all').columns))
'''
id1
a1    3
b1    4
c1    2
dtype: int64

最新更新