我有一个熊猫数据框df
,其内容如下;
Date Factor Expiry Grade
0 12/31/1991 2.138766 3/30/1992 -3.33%
1 10/29/1992 2.031381 2/8/1993 -1.06%
2 5/20/1993 2.075670 6/4/1993 -6.38%
3 10/11/1994 1.441644 11/22/1994 -7.80%
4 1/11/1995 1.669600 1/20/1995 -7.39%
5 5/15/1995 1.655237 8/8/1995 -8.68%
6 10/17/1996 0.942000 10/22/1996 -7.39%
7 2/19/1998 0.838838 5/26/1998 13.19%
8 7/9/1998 1.303637 8/28/1998 -6.73%
9 12/29/1998 1.517232 1/21/1999 -11.03%
10 4/26/1999 1.613346 5/24/1999 -7.55%
11 7/8/1999 2.136339 9/23/1999 5.43%
12 3/22/2000 5.097782 3/29/2000 -6.44%
我想在Date
<=-8%的行所对应的Grade
列下提取日期。
理想的输出将是这样的字符串列表;
output_dates = ['5/15/1995', '12/29/1998']
我正在使用python v3.6
答案 0 :(得分:1)
使用
In [464]: df.loc[df.Grade.str[:-1].astype(float).lt(-8), 'Date']
Out[464]:
5 5/15/1995
9 12/29/1998
Name: Date, dtype: object
In [465]: df.loc[df.Grade.str[:-1].astype(float).lt(-8), 'Date'].tolist()
Out[465]: ['5/15/1995', '12/29/1998']
或者,使用
df.Grade.str.replace('%', '').astype(float)
答案 1 :(得分:1)
使用rstrip
删除最后一个%
,使用le
(<=
)转换为float和comapre,使用布尔掩码,用boolean indexing
过滤:>
out = df.loc[df['Grade'].str.rstrip('%').astype(float).le(-8), 'Date']
print (out)
5 5/15/1995
9 12/29/1998
Name: Date, dtype: object
或用于列表:
out = df.loc[df.Grade.str.rstrip('%').astype(float).le(-8), 'Date'].tolist()
print (out)
['5/15/1995', '12/29/1998']