【问题标题】:How to reorganize the data in a pandas dataframe如何重组熊猫数据框中的数据
【发布时间】:2022-01-08 11:37:12
【问题描述】:

我有一个包含 400000 行的 csv 文件。数据由日期、股票名称、股票价格三栏组成。 csv 文件包含过去 15 年超过 50 只股票的数据。我使用数据框从 csv 文件中读取数据。数据框类似于下面给出的 df1。

df1 = pd.DataFrame([['d1', 'd2', 'd3', 'd1', 'd2', 'd3', 'd1', 'd2', 'd3'], list('AAABBBCCC'), [1.1,1.2,1.3,2.1,2.2,2.3,3.1,3.2,3.3]]).T
df1.columns = ['dt','stockname','price']
print(df1)

我希望股票名称作为标题,日期作为索引。如何转换或组织 csv 以表示类似于下面给出的 df2 的数据帧。

df2 = pd.DataFrame([['d1','d2','d3'],[1.1,1.2,1.3],[2.1,2.2,2.3],[3.1,3.2,3.3]]).T
df2.columns=['dt','A','B','C']
df2.set_index('dt')
print(df2)

【问题讨论】:

  • 您的真实数据框中的(d1, d2) 列中是否有重复项?试试看df1.value_counts(['col1', 'col2'])
  • 所有列都有重复值
  • 所以pivot 不能工作,你必须使用pivot_table。假设您有两个相同的行,例如 (d1, A),其值为 4 和 2。您想做什么?取平均值 (3)、第一个值 (4)、最后一个值 (2)、最大值 (4)、最小值 (2) 还是应用自定义函数?
  • 我已更新问题以暗示更多信息
  • 所以没有相同(日期时间,股票)的重复记录,不是吗?

标签: python pandas dataframe


【解决方案1】:

使用pivot:

>>> df1.pivot('dt', 'stockname', 'price').rename_axis(columns=None).reset_index()

   dt    A    B    C
0  d1  1.1  2.1  3.1
1  d2  1.2  2.2  3.2
2  d3  1.3  2.3  3.3

【讨论】:

  • 它能解决你的问题吗?
  • 它没有解决我的问题。我收到错误消息-'索引包含重复条目,无法重塑'。
  • 所以你有多个记录为同一个(dt, stockname)...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多