【发布时间】:2021-05-13 02:57:40
【问题描述】:
我有一个数据框,需要过滤掉第一列中的元素列表,第二列中同时包含空值和非空值。
["1"] ["2"]
"A" "Smthng"
"B" "sometext"
"C" NULL
"A" NULL
对于这种情况,我应该得到A:
["1"] ["2"]
"A" "Smthng"
"A" NULL
我这样做了,它正在工作。但也许你知道如何在一行代码中更快地做到这一点。
我做了什么:
NamesWithMissing = df[df['2'].isna()]['1'].tolist()
NamesWithMissing = df[(df['1'].isin(NamesWithMissing)) & (df['2'].notnull())]['1'].tolist()
df[df['1'].isin(NamesWithMissing)].sort_values(by="1")
更新
找到有趣的解决方案:
df.groupby('1').filter(lambda g: (g.nunique() > 1).any())
【问题讨论】: