jov*_*cbg 7 python dataframe pandas
我有这样的数据帧,数据:
Site code Col1 Col2 Col3
A5252 24 53 NaN
A5636 36 NaN NaN
A4366 NaN NaN NaN
A7578 42 785 24
Run Code Online (Sandbox Code Playgroud)
我想要计算一些具有一定价值的列,但没有NaN.期望的输出:
Site code Col1 Col2 Col3 Count
A5252 24 53 NaN 2
A5636 36 NaN NaN 1
A4366 NaN NaN NaN 0
A7578 42 785 24 3
Run Code Online (Sandbox Code Playgroud)
与此相反的东西:df = data.isnull().sum(axis = 1)
#if first columns is not index, set it
data = data.set_index('Site code')
data['Count'] = data.notnull().sum(axis=1)
Run Code Online (Sandbox Code Playgroud)
或使用功能DataFrame.count:
data = data.set_index('Site code')
data['Count'] = data.count(axis=1)
print (data)
Col1 Col2 Col3 Count
Site code
A5252 24.0 53.0 NaN 2
A5636 36.0 NaN NaN 1
A4366 NaN NaN NaN 0
A7578 42.0 785.0 24.0 3
Run Code Online (Sandbox Code Playgroud)
选择列的另一种解决方案是loc(Site code是列,不是index):
print (data.loc[:, 'Col1':])
Col1 Col2 Col3
0 24.0 53.0 NaN
1 36.0 NaN NaN
2 NaN NaN NaN
3 42.0 785.0 24.0
data['Count'] = data.loc[:, 'Col1':].count(axis=1)
print (data)
Site code Col1 Col2 Col3 Count
0 A5252 24.0 53.0 NaN 2
1 A5636 36.0 NaN NaN 1
2 A4366 NaN NaN NaN 0
3 A7578 42.0 785.0 24.0 3
Run Code Online (Sandbox Code Playgroud)
Jon Clements的另一个好主意- 使用filter:
data['Count'] = data.filter(regex="^Col").count(axis=1)
print (data)
Site code Col1 Col2 Col3 Count
0 A5252 24.0 53.0 NaN 2
1 A5636 36.0 NaN NaN 1
2 A4366 NaN NaN NaN 0
3 A7578 42.0 785.0 24.0 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6189 次 |
| 最近记录: |