如何选择包含特定列列表中数据的行,并删除那些特定列中根本没有数据的行?
这是我到目前为止的代码:
VC_sub_selection = final[final['VC'].isin(['ACTIVE', 'SILENT']) & final['Status'].isin(['Test'])]
data_usage_months = list(data_usage_res.columns)
这是数据集的一个例子
item VC Status Jun 2016 Jul 2016
1 Active Test Nan 1.0
2 Silent Test Nan Nan
3 Active Test 2.0 3.0
4 Silent Test 5.0 Nan
我希望实现的是项目1,3,4将保留在数据集中,项目2将被删除。所以适用的条件是:如果所有月份都是Nan
而不是下降行。
谢谢,
的Jeroen
答案 0 :(得分:1)
尽管Nickil的解决方案回答了这个问题,但它没有考虑到以后可能会添加更多日期列。因此,在将来的情况下使用列的索引位置可能不够。
下面介绍的解决方案不使用索引,而是使用正则表达式查找日期列:
import pandas as pd
import re
# item VC Status Jun 2016 Jul 2016
# 1 Active Test Nan 1.0
# 2 Silent Test Nan Nan
# 3 Active Test 2.0 3.0
# 4 Silent Test 5.0 Nan
df = pd.DataFrame({'item': [1,2,3,4],
'VC': ['Active', 'Silent', 'Active', 'Silent'],
'Status': ['Test'] * 4,
'Jun 2016': [None, None, 2.0, 5.0],
'Jul 2016': [1.0, None, 3.0, None]})
regex_pattern = r'[a-zA-Z]{3}\s\d{4}'
date_cols = list(filter(lambda x: re.search(regex_pattern, x), df.columns.tolist()))
df_res = df.dropna(subset=date_cols, how='all')
# Jul 2016 Jun 2016 Status VC item
# 0 1.0 NaN Test Active 1
# 2 3.0 2.0 Test Active 3
# 3 NaN 5.0 Test Silent 4