按照表达式值切换pandas数据帧

时间:2015-05-13 15:01:19

标签: python python-2.7 pandas

我正在使用Python Pandas&我有以下用例 -

我使用参数字典来接受用户输入&我有一个输入变量" Period"用户值为10.

paramDict = {
                "Period":
                        {
                        "Description": "A Period to filter on.",
                        "ParameterType" : "Value",
                        "DataType": "Number",                        
                        "Value" : ['10']
                        }
             }

现在,我有一个数据帧df_temp,如下所示 -

           CODE         POSTING_PERIOD         POSTING_VALUE
0         00152                 CDD01J                115084
1         00152                 CDD02J                115177
2         00152                 CDD03J                115271
3         00152                 CDD04J                115359
4         00152                 CDD05J                115359
5         00152                 CDD06J                115359
6         00152                 CDD07J                115359
7         00152                 CDD08J                115359
8         00152                 CDD09J                115359
9         00152                 CDD10J                115359
10        00152                 CDD11J                115359
11        00152                 CDD12J                115359

现在,根据用户输入" 10"在这种情况下,我只想选择第9行,其中df [' POSTING_PERIOD'] =' CDD10J'

注意:如果用户输入为1,我们应该能够前缀0到1&然后应选择第0行,其中df [' POSTING_PERIOD'] =' CDD01J'

你能帮我一下吗?感谢

2 个答案:

答案 0 :(得分:1)

编辑:进一步反射时,只需使用zfill将字符串填充到长度为2 zfill会将一个字符串转换为具有填充零的特定长度的字符串:

In [1]: '1'.zfill(2)
Out [1]: '01'
In [2]: '12'.zfill(2)
Out [2]: '12'

您可以使用标准字符串方法来获取数据帧的一部分。这看起来像

df_temp[df_temp.POSTING_PERIOD.str.contains(paramDict['Period']['Value'].zfill(2))]

答案 1 :(得分:1)

扩展@joris代码:

> user_input = paramDict['Period']['Value']
> df_temp[df_temp['POSTING_PERIOD'].str[3:5].astype(int) == int(user_input)]
   CODE POSTING_PERIOD  POSTING_VALUE
0   152         CDD01J         115084