pandas操作中具有相同索引列的多个条目

时间:2017-07-16 14:23:24

标签: python-3.x csv pandas

我有以下数据。注意,对于FPEDATS和CUSIP的每个组合,有多个STATPERS。

CUSIP,STATPERS,NUMEST,FPEDATS
87482X10,20140417,4,20141231
87482X10,20140515,4,20141231
87482X10,20140619,5,20141231
12345678,20140717,3,20141231
12345678,20140814,5,20141231
87482X10,20140417,1,20151231
87482X10,20140515,2,20151231
87482X10,20140619,3,20151231
12345678,20140717,4,20151231
12345678,20140814,5,20151231

如果我使用panda.read_csv和columns = [" FPEDATS"," CUSIP"]。我得到以下内容。

                      STATPERS    NUMEST
CUSIP    FPEDATS                      
87482X10 2014-12-31 2014-04-17       4
         2014-12-31 2014-05-15       4
         2014-12-31 2014-06-19       5
12345678 2014-12-31 2014-07-17       3
         2014-12-31 2014-08-14       5
87482X10 2015-12-31 2014-04-17       1
         2015-12-31 2014-05-15       2
         2015-12-31 2014-06-19       3
12345678 2015-12-31 2014-07-17       4
         2015-12-31 2014-08-14       5

对于CUSIP和FPEDATS的每个组合,我感兴趣的是:

  1. 我们只能保留一个带有最大日期戳的那个并删除其他行吗? (基本上由最大的STATPERS过滤)
  2. 我们可以计算每个指数组合的NUMEST值的平均值,保存或用它替换当前数据吗?
  3. 例如,
  4. 可以指定一个新属性,例如" price"这是CUSIP和FPEDATS的每个组合所共有的。
  5. 对于2,我的意思是:

                          STATPERS    NUMEST
    CUSIP    FPEDATS
    12345678 2014-12-31 2014-08-14      5
             2015-12-31 2014-08-14      5
    87482X10 2014-12-31 2014-06-19      5
             2015-12-31 2014-06-19      3
    

    对于3,我的意思是我想要像

    这样的东西
                          STATPERS  NUMEST  Price
    CUSIP    FPEDATS                      
    87482X10 2014-12-31 2014-04-17       4   2
             2014-12-31 2014-05-15       4   2
             2014-12-31 2014-06-19       5   2
    12345678 2014-12-31 2014-07-17       3   4
             2014-12-31 2014-08-14       5   4
    87482X10 2015-12-31 2014-04-17       1   5
             2015-12-31 2014-05-15       2   5
             2015-12-31 2014-06-19       3   5
    12345678 2015-12-31 2014-07-17       4   7
             2015-12-31 2014-08-14       5   7
    

    当我只想解析[(" CUSIP"," FPEDATS"," PRICE")](作为元组或熊猫系列的列表) )?有没有一种光滑的方式呢?

    到目前为止,我想出解决所有这些问题的唯一方法是在csv包中使用csv reader来读取csvs,然后将所有内容都恢复为panda格式。我希望有一种更简单的方法。

    更新:我通过MultiIndexing方法设法做到了2。基本上使用

    计算MultiIndex
    c = analyst_file.groupby(["CUSIP", "FPEDATS"])["STATPERS"].max()
    

    然后我们将这些索引写为元组列表并使用切片。 还是想做一些更光滑的事情。

1 个答案:

答案 0 :(得分:1)

假设我们有以下DF:

In [193]: df
Out[193]:
                      STATPERS  NUMEST
CUSIP    FPEDATS
87482X10 2014-12-31 2014-04-17       4
         2014-12-31 2014-05-15       4
         2014-12-31 2014-06-19       5
12345678 2014-12-31 2014-07-17       3
         2014-12-31 2014-08-14       5
87482X10 2015-12-31 2014-04-17       1
         2015-12-31 2014-05-15       2
         2015-12-31 2014-06-19       3
12345678 2015-12-31 2014-07-17       4
         2015-12-31 2014-08-14       5

我们可以做到以下几点:

In [192]: df.groupby(level=[0,1]).agg({'STATPERS':'max','NUMEST':'mean'})
Out[192]:
                      STATPERS    NUMEST
CUSIP    FPEDATS
12345678 2014-12-31 2014-08-14  4.000000
         2015-12-31 2014-08-14  4.500000
87482X10 2014-12-31 2014-06-19  4.333333
         2015-12-31 2014-06-19  2.000000

PS请详细说明common to each combination of CUSIP and FPEDATS - 它不清楚......