pandas 如果任何列只包含一个组的nan值,我如何删除该组中的所有行?

fd3cxomn  于 2023-08-01  发布在  其他
关注(0)|答案(3)|浏览(95)

如果某个组中存在只包含nan值的列,我试图删除属于该组的所有行。
举例来说:
| 色谱柱A| B栏| Column B |
| --|--| ------------ |
| 二个|南| Nan |
| 三个|南| Nan |
| 二个|三个| 3 |
| 三个|南| Nan |
| NaN|四| 4 |
| 南|南| Nan |
| NaN|四| 4 |
在这种情况下,我只希望删除ID 1和ID 4的行,因为B列只包含ID 1的nans,A列只包含ID 4的nans。组2是好的,因为没有nan,组3是好的,因为两列都不包含nan。
换句话说,我的预期输出如下:
| 色谱柱A| B栏| Column B |
| --|--| ------------ |
| 二个|三个| 3 |
| 三个|南| Nan |
| NaN|四| 4 |
我如何做到这一点?
我尝试遵循Python pandas - remove group based on collective NaN count,但这只考虑单个列,或者聚合所有列的nan。

ulmd4ohb

ulmd4ohb1#

按条件过滤:

df.groupby('ID').filter(lambda x: ~(x.isna().all().any()))

个字符

am46iovg

am46iovg2#

试试这个:

grouped = df.groupby('ID').sum()
grouped = grouped[grouped['Column B'] > 0]
df[df.index.isin(grouped.index)]

字符串

jdzmm42g

jdzmm42g3#

编码

df.groupby('ID').filter(lambda x: x['Column B'].notna().sum() > 0)

字符串
产出:

ID  Column A    Column B
2   2   2.0         3
3   3   3.0         NaN
4   3   NaN         4

相关问题