我有一个熊猫数据框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
和Expiry
列值,这些列值对应于等级<=-8%的行。
理想的输出将是这样的字符串列表的列表;
output_dates = [ ['5/15/1995', '8/8/1995'], ['12/29/1998', '1/21/1999'] ]
我当前的解决方案现在只能提取Date
。
out = df.loc[df['Grade'].str.rstrip('%').astype(float).le(-8), 'Date']
给出['5/15/1995', '12/29/1998']
。但是,这还不够,因为它只能检索一个列值。
我正在使用python v3.6
答案 0 :(得分:1)
您可以在列表中定义列:
cols = ['Expiry', 'Date']
print (df.loc[df['Grade'].str.rstrip('%').astype(float).le(-8), cols])
Expiry Date
5 8/8/1995 5/15/1995
9 1/21/1999 12/29/1998
如果需要输出list
,则需要先转换为numpy数组,然后转换为list
:
out = df.loc[df['Grade'].str.rstrip('%').astype(float).le(-8), cols].values.tolist()
print (out)
[['8/8/1995', '5/15/1995'], ['1/21/1999', '12/29/1998']]