Python 根据当前使用熊猫的总年数筛选行
假设我有一个带有以下列的数据框Python 根据当前使用熊猫的总年数筛选行,python,pandas,Python,Pandas,假设我有一个带有以下列的数据框df: import pandas as pd df = pd.read_csv('data.csv') df Cities Start_date End_date data_avail A 1-03-2000 1-03-2012 12 B 1-12-2002 1-12-2005 3 C 1-04-2000 1-04-2010 10 D 1-04-2009 1-04-2016
df
:
import pandas as pd
df = pd.read_csv('data.csv')
df
Cities Start_date End_date data_avail
A 1-03-2000 1-03-2012 12
B 1-12-2002 1-12-2005 3
C 1-04-2000 1-04-2010 10
D 1-04-2009 1-04-2016 7
E 1-04-2003 1-05-2007 5
如何了解2005年至2010年期间存在至少三年数据的所有城市。例如,在上述示例中,只有城市A、C和E满足上述条件。因此,预期产出为:
df
Cities Start_date End_date total_no
A 1-03-2000 1-03-2012 12
C 1-04-2000 1-04-2010 10
E 1-04-2003 1-05-2007 5
首先按指定列删除可能缺少的行:
df = df.dropna(subset=['Start_date','End_date'])
想法是按年份创建范围,将范围r
与长度转换为相交集,然后传递到:
Lsit理解备选方案,布尔列表的输出传递给布尔索引
:
df['Start_date'] = pd.to_datetime(df['Start_date'])
df['End_date'] = pd.to_datetime(df['End_date'])
r = set(range(2005, 2011))
z = zip(df['Start_date'].dt.year, df['End_date'].dt.year)
L = [len(set(range(s, e + 1)) & r) > 2 for s, e in z]
df = df[L]
print (df)
Cities Start_date End_date data_avail
0 A 2000-01-03 2012-01-03 12
2 C 2000-01-04 2010-01-04 10
4 E 2003-01-04 2007-01-05 5
这对你有用吗 data.csv
Cities,Start_date,End_date,data_avail
A,1-03-2000,1-03-2012,12
B,1-12-2002,1-12-2005,3
C,1-04-2000,1-04-2010,10
D,1-04-2009,1-04-2016,7
E,1-04-2003,1-05-2007,5
def can_允许(世界其他地区):
允许的年数=[2005、2006、2007、2008、2009、2010]
开始年份=行[“开始日期”]。年份
结束年份=行[“结束日期”]。年份
return len(list)(filter(lambda year:start_year我收到这个错误TypeError:“float”对象不能解释为整数@SaiKiran-这意味着有一些缺少的值,如何工作s=df.dropna().apply(func,axis=1)。重新索引(df.index,fill_value=False)
?@SaiKiran-答案已编辑。使用df=df.dropna(子集=['Start\u date','End\u date'])
代码运行良好。我可以知道代码中年数的阈值在哪里吗?代码看起来有点难以理解。@SaiKiran-它在范围(2005,2011)中指定
我收到此错误:AttributeError:“Timestamp”对象没有属性“split”
添加了data.csv的内容。您从何处得到此错误?编辑后它现在正在工作。感谢您的努力。
Cities,Start_date,End_date,data_avail
A,1-03-2000,1-03-2012,12
B,1-12-2002,1-12-2005,3
C,1-04-2000,1-04-2010,10
D,1-04-2009,1-04-2016,7
E,1-04-2003,1-05-2007,5
Cities Start_date End_date data_avail
0 A 2000-01-03 2012-01-03 12
2 C 2000-01-04 2010-01-04 10
4 E 2003-01-04 2007-01-05 5