我的输入是一个框架:
df = pd.DataFrame({'col1': ['A', 'A', 'B', 'C', 'D', 'D', 'D', 'E', 'E'],
'col2': ['x1', 'x2', 'x1', 'x1', 'x1', 'x2', 'x3', 'x1', 'x2'],
'col3': ['', 'mssg1', 'mssg2', '', 'mssg3', '', 'mssg4', '', '']})
col1 col2 col3
0 A x1
1 A x2 mssg1
2 B x1 mssg2
3 C x1
4 D x1 mssg3
5 D x2
6 D x3 mssg4
7 E x1
8 E x2
字符串
我需要遍历col1
列中的每个组,看看它是否是重复的,如果是True,检查col3
列,只保留非空值。如果所有值都是空的,那么保留它们。
乍一看,它可以工作,但它不仅在我的真实的数据集上很慢,而且我也忽略了它是否在逻辑上遗漏了什么。
def clean(x):
if len(x) > 1 and x['col3'].notna().any():
return x.loc[x['col3'].notna()]
else:
return x
final = df.replace('', None).groupby('col1', as_index=False).apply(clean).droplevel(0).fillna('')
型
我的预期输出是这样的:
col1 col2 col3
1 A x2 mssg1
2 B x1 mssg2
3 C x1
4 D x1 mssg3
6 D x3 mssg4
7 E x1
8 E x2
型
你们能告诉我怎么解决我的问题吗?
2条答案
按热度按时间vtwuwzda1#
使用布尔索引:
字符串
输出量:
型
lfapxunr2#
验证码
如果df的col3不是“”,或者当df按col1分组时,组中col3的所有值都是“”,则保留它
字符串
输出:
型