我有一个多索引数据框,其索引和行中包含一些NaN
值。
In:
import pandas as pd
import numpy as np
row1 = {'index1' : 'abc', 'col1' : 'some_value', 'col3' : True}
row2 = {'index2' : 'xyz', 'col2' : 'other_value', 'col3' : np.nan}
row3 = {'index1' : 'def', 'col1' : 'different_value', 'col3' : False}
row4 = {'index2' : 'uvw', 'col2' : 'same_value', 'col3' : np.nan}
df = pd.DataFrame([row1, row2, row3, row4])
df.set_index(['index1', 'index2'], inplace=True)
print(df)
Out:
col1 col2 col3
index1 index2
abc NaN some_value NaN True
NaN xyz NaN other_value NaN
def NaN different_value NaN False
NaN uvw NaN same_value NaN
是否有可能通过条件col3 == True
获取该数据帧的子集,该条件还包括所有"子行"该条件所在的行?
当我去
print(df[df.col3 == True])
我得到了
col1 col2 col3
index1 index2
abc NaN some_value NaN True
是条件所在的行。但是,我正在寻找的是
col1 col2 col3
index1 index2
abc NaN some_value NaN True
NaN xyz NaN other value NaN
,包括那些本身没有True
值但是" subrow" index1 == abc
行的行。
这可能吗?或者数据框是否混乱,应该以不同的方式构建?
答案 0 :(得分:1)
一个简单的解决方案是在填充col3
上使用条件,其中NaNs
将替换为它们所属行的值。例如:
>>> df['col3'].fillna(method='pad')
index1 index2
abc NaN True
NaN xyz True
def NaN False
NaN uvw False
Name: col3, dtype: bool
现在你可以应用这样的条件:
>>> df[df['col3'].fillna(method='pad')]
col1 col2 col3
index1 index2
abc NaN some_value NaN True
NaN xyz NaN other_value NaN