我有一个数据集:
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)
- 每一行
- 在0处启动计数器
- 对于该行中的每个元素
- 如果不是nan,则将计数器加1。如果它是nan,我们想要跳出循环(停止计数)。 输出:
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