当列值符合特定条件时,在熊猫数据框的行中提取2列数据

时间:2018-07-27 07:08:11

标签: python-3.x pandas

我有一个熊猫数据框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% 

我想提取DateExpiry列值,这些列值对应于等级<=-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

1 个答案:

答案 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']]