python - 按 Pandas 数据框列的相同部分字符串分组

标签 python csv pandas ipython dataframe

我有几个 csv 文件,每个文件包含一个月内的一个股票价格,并且有数百万条数据。 原始 csv 数据数据如下:

AA_Candy.csv

Index   CompanyName      Time       Price
  1      AA Candy    030101090355   1.78
  2      AA Candy    030101091533   1.79
  .......
333498   AA Candy    031231145556   2.18

BB_Cookie.csv

   1     BB Cookie   030101090225   3.20
   2     BB Cookie   030101090845   3.14
  .......
391373   BB Cookie   031231145958   3.88

我使用 python 和 pandas 来处理数据,在我加载并合并一些数据文件之后,现在我有一个数据框,如下所示:

框架:

Index   CompanyName      Time       Price
  1      AA Candy    030101090355   1.78
  2      AA Candy    030101091533   1.79
  .......
333498   AA Candy    031231145556   2.18
333499   BB Cookie   030101090225   3.20
333500   BB Cookie   030101090845   3.14
  .......
712871   BB Cookie   031231145958   3.88

时间031231145958代表2013-12-31 14:59:58

现在我想获取每个公司每小时的最高价和最终价,并得到一个输出文件,如:

range_start   AA Candy/Max    AA Candy/Close    BB Cookie/Max     BB Cookie/Close
0301010900     1.79              1.77            3.20              3.10
........
0312311400     2.24              2.18            3.88              3.88

所以我想通过CompanyName和Time的前8个字符进行分组,得到同一家公司在一个小时内的数据,然后计算出每家公司的最高价格值和最终价格值,并输出相同的结果连续开始小时;让 companyName/Max 或 Close 成为新的列名。

因为我是 pandas 和 dataframe 的新手,所以我有以下问题:

  1. 如何按时间列(对象)的前 8 个字符对数据进行分组,然后得到我的期望值?
  2. 如何形成一个新的输出数据框/矩阵作为我的预期输出?

谢谢!!

最佳答案

对公司名称和字符串时间戳的前 8 个字符(即日期加小时)执行 groupby。然后在价格上使用 agg 以获得每个(first、max、min 和 last)的自定义函数。拆开公司名称,交换公司名称的级别和开盘价/最高价/最低价/收盘价,并可选择对您的符号进行排序。

gb = (df.groupby(['CompanyName', df.Time.str[:8]])
        .Price
        .agg({'open': 'first', 
              'high': np.max, 
              'low': np.min, 
              'close': 'last'})[['open', 'high', 'low', 'close']]
        .unstack('CompanyName'))
gb.columns = gb.columns.swaplevel(0, 1)
>>> gb.sortlevel(level=0, axis=1)
CompanyName AA Candy                   BB Cookie                  
                open  high   low close      open  high   low close
Time                                                              
03010109        1.78  1.79  1.78  1.79      3.20  3.20  3.14  3.14
03123114        2.18  2.18  2.18  2.18      3.88  3.88  3.88  3.88

关于python - 按 Pandas 数据框列的相同部分字符串分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35259801/

相关文章:

python - 从 python 中现有的 dict 列表中获取子集 dict 的列表

python - 如何在django models.py中查询相关模型

python - 在 Debian 系统上登录时运行一个简单的 Python TCP 服务器

python - 更有效地重新格式化具有不等量空格的文本文件,然后转换为 csv

python - 如何将非常特殊的列表导出到 excel 或 csv

python - 我如何用 Nan 读取 pandas 中的 CSV 文件?

python - 为什么 “else” 行给出无效语法错误?

python - Google DataFlow,转换集合时如何等待外部网络钩子(Hook)?

java - 在 JMeter 的 CSV 数据集中,每个线程使用相同的行

python - concat + groupby + 应用在 panda dataframe 的多列中