python - 插入特定于列的 NaN 并根据值删除行

标签 python pandas dataframe insert nan

我对昆虫进行了几次假设测试。我想删除 result_1 值“小于 10” 的行,我认为这些行并不重要,但希望将 NaN 值保留为 单行显示进行了哪个测试以及针对哪种昆虫。

from pandas import Series, DataFrame
import numpy as np

A = Series(['A','A','B','B','B','C'])
B = Series(['ant','flea','flea','spider','spider','flea'])
C = Series([88,77,1,3,2,67])
D = Series(np.random.randn(6))

df = DataFrame({'test':A.values,'insect':B.values,
            'result_1':C.values,'result_2':D.values},
           columns=['test','insect','result_1','result_2'])
df

所以原始的 Dataframe 看起来像这样:

enter image description here

因为索引 2,3 和 4 的 results_1 值 <10,所以我想删除所有这些行,并注意留下一行(both 中均为 NaN 结果列)以显示测试 B 是在跳蚤(索引 2)上执行的,并且应留下一行以显示测试 B 确实是在蜘蛛上执行的(索引 3 和 4,需要删除一项,然后其他需要在结果列中插入 NaN)。

因此,生成的数据框应如下所示:

enter image description here

最佳答案

我认为你可以使用:

#add NaN by condition
df.loc[df.result_1 < 10, ['result_1','result_2']] = np.nan 
#drop duplicated by column insect
df[df.result_1.isnull()] = df[df.result_1.isnull()].drop_duplicates(subset='insect')
df = df.dropna(how='all')
print (df)
  test  insect  result_1  result_2
0    A     ant      88.0 -0.037844
1    A    flea      77.0 -1.088879
2    B    flea       NaN       NaN
3    B  spider       NaN       NaN
5    C    flea      67.0  1.455632

另一种解决方案,找到相关索引,然后 drop具有此索引的行:

mask = df.result_1 < 10

df.loc[mask, ['result_1','result_2']] = np.nan 
a = df[mask].duplicated(subset='insect')
print (a)
2    False
3    False
4     True
dtype: bool

a = a[a].index
df = df.drop(a)
print (df)
  test  insect  result_1  result_2
0    A     ant      88.0 -0.176274
1    A    flea      77.0 -0.123691
2    B    flea       NaN       NaN
3    B  spider       NaN       NaN
5    C    flea      67.0 -0.310655

关于python - 插入特定于列的 NaN 并根据值删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37821394/

相关文章:

python - 在字典列表中添加索引哪个更有效?

python - 没有 self 作为第一个参数的 python 方法

python - 尝试将 matplotlib 与 ABAQUS 结合使用。收到涉及 dateutil 的错误

python - 识别数据框中连续出现的值

Python Groupby 基于另一列中的字符串运行总计/总和列

python - 将字典列表转换为 DataFrame 时出现类型错误

python - 在Python中删除数据框中的重复行

python - 为什么深度学习 Keras 上的准确率总是 0.00%,损失很高

python - 按标签选择的 Pandas 有时会返回 Series,有时会返回 DataFrame

python - Pandas 中的数据透视表 - 不可排序的类型