【问题标题】:How to map/classify dates in Python?如何在 Python 中映射/分类日期?
【发布时间】:2020-10-02 04:25:18
【问题描述】:

我有一个显示公司季度财务公告日期的 DataFrame。问题是数据被错误地映射/分类。 MSFT 和 TSLA 是这些扭曲行的示例。如您所见,这些行缺少被跳过的数据,因此被映射到较早的日期(MSFT)。而在 TSLA 中,前几列是第一行的重复。

APPL 和 FACE 是一个正确的示例,其中 dat3 列和行日期彼此相似。

Company_Name  Q1 2012  Q2 2012 Q3 2012 ..... Q4 2019
APPL  15022012 16052012 20082012 13112012 ........ 12122019 
FACE  23022012 12052012 22082012 13112012 ........ 20122019 
MSFT  22022019 11052019 24082019 11112019
TSLA  15022012 15022012 15022012 13112012 ........ 20122019 

我计划对日期进行映射/分类,以便每列都有适当的日期。即

Q1 --> 010220XX - 010520XX
Q2 --> 010520XX - 010820XX
Q3 --> 010820XX - 011120XX
Q4 --> 011120XX - 010220(XX+1)

非常感谢您的帮助。

图片显示原始 csv 数据。列是每年的季度,单元格上的日期对应于该季度公司财务的公告日期 [1]:https://i.stack.imgur.com/QUlWy.png

【问题讨论】:

  • 如何获取数据?它是一个csv文件吗?可以分享一下格式吗?
  • 是的,它是一个 csv 文件,我将添加一个屏幕截图。你能澄清一下你所说的格式是什么意思吗?

标签: python python-3.x dataframe


【解决方案1】:

代码:

import pandas as pd
df = pd.read_csv("t.csv", index_col=None)

df_transpose = df.T
df_transpose = df_transpose[1:]
df_transpose

idx = df_transpose.index.values
idx = [i.split('20')[0] for i in idx]
idx

df_transpose['index'] = idx
df2 = df_transpose.set_index('index')
df2

df3 = tuple(df2.groupby('index')) 

df_final = pd.DataFrame()

for i in df3:
    p = i[1][0:1]
    q = i[1][1:2]
    row = pd.concat([p, q], axis=1, ignore_index=True, sort=False)
    df_final = df_final.append(row)

df_final

图片

【讨论】:

  • 请不要在问题或答案中插入代码截图。它们是无用的,因为它们不能被复制或编辑。
  • 先了解后ctrl + C ctrl + V。但是我明白了;谢谢
  • @ArmelDrey Why do we hate screenshots so much? 屏幕截图为 0。不可复制粘贴。 1. 不可搜索。 2. 使用屏幕阅读器的人无法阅读 3. 当整个屏幕截图被我的浏览器压缩到屏幕宽度的三分之一时,无法阅读。
  • 您应该发布您的代码as formatted text。 SO 包括一个代码高亮器,可以突出显示您放入代码围栏中的任何代码。
  • 此外,虽然仅代码的答案可能会回答问题,但您可以通过为代码提供上下文、此代码有效的原因以及对文档的一些参考来显着提高答案的质量进一步阅读。来自How to Answer“简洁是可以接受的,但更全面的解释更好。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
  • 2019-07-30
  • 2019-04-15
相关资源
最近更新 更多