鱼C论坛

 找回密码
 立即注册
查看: 2601|回复: 11

[已解决]求助各位老师,按照年份进行行列转置?

[复制链接]
发表于 2022-5-19 21:55:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 caeser 于 2022-5-19 21:56 编辑

求助各位老师,我怎么把原始数据格式按照年份进行行列转置?
最佳答案
2022-5-20 09:37:21
  1. import pandas as pd
  2. file=r'D:\temp\测试数据样本.csv'
  3. newdf = pd.DataFrame()
  4. with open(file,'r') as f:
  5.     df = pd.read_csv(f,encoding='gb2312')
  6.     dfid = df['date'].drop_duplicates().reset_index(drop=True)
  7.     for i in dfid:
  8.         newdf[i]=df["price"].where(df["date"]==i).dropna(how='any').reset_index(drop=True)
复制代码

原始数据格式

原始数据格式

我想要的数据格式

我想要的数据格式

测试数据.zip

293 Bytes, 下载次数: 7

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-5-19 22:19:57 | 显示全部楼层


你发出来的数据就是转置后的...

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-20 07:03:12 From FishC Mobile | 显示全部楼层
恐怕还得自己写vba代码
现成的转置都不符合你的要求
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-20 09:01:29 | 显示全部楼层
一、简单的方法用excel数据透视表。1.在B列插入一列序号“num”,B2输入公式“=COUNTIF($A$2:A2,A2)”向下填充。2.依次选择“插入”、“数据透视表”、“确定”。3.数据透视表字段对应选择,列“date”,行“num”,值“price”,OVER.
二、用pandas思路,A列去重当列索引,依次提取拼接。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-20 09:37:21 | 显示全部楼层    本楼为最佳答案   
  1. import pandas as pd
  2. file=r'D:\temp\测试数据样本.csv'
  3. newdf = pd.DataFrame()
  4. with open(file,'r') as f:
  5.     df = pd.read_csv(f,encoding='gb2312')
  6.     dfid = df['date'].drop_duplicates().reset_index(drop=True)
  7.     for i in dfid:
  8.         newdf[i]=df["price"].where(df["date"]==i).dropna(how='any').reset_index(drop=True)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-20 09:59:22 | 显示全部楼层
  1. import csv
  2. from itertools import zip_longest

  3. def readcsv(filepath):
  4.     data = {}
  5.     with open(filepath,'r') as f:
  6.         reader = csv.reader(f)
  7.         for row in reader:
  8.                 if row[0] not in data:
  9.                     data[row[0]] = []
  10.                 data[row[0]].append(row[-1])
  11.     return data

  12. def writecsv(filepath, data):
  13.     with open(filepath, 'w', newline='') as f:
  14.         writer = csv.DictWriter(f, data.keys())
  15.         writer.writeheader()
  16.         write_datas = []
  17.         for each in zip_longest(*data.values(), fillvalue=''):
  18.             write_datas.append(dict(zip(data.keys(), each)))
  19.         writer.writerows(write_datas)
  20.             
  21. if __name__ == '__main__':
  22.     result = readcsv('./test.csv')
  23.     writecsv('./result.csv', result)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-20 13:46:25 | 显示全部楼层
Twilight6 发表于 2022-5-19 22:19
你发出来的数据就是转置后的...

不好意思,疏忽了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-20 13:47:09 | 显示全部楼层
elven08 发表于 2022-5-20 09:01
一、简单的方法用excel数据透视表。1.在B列插入一列序号“num”,B2输入公式“=COUNTIF($A$2:A2,A2)”向下 ...

谢谢,excel,我能搞定的。但pandas不会。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-20 13:48:26 | 显示全部楼层

非常感谢大神老师,可惜最佳答案只能设置一个,抱歉了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-21 11:52:50 | 显示全部楼层

老师,能不能麻烦一个事,您写的代码我还是看得不是太懂,可以写个注释吗?谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-22 08:01:53 | 显示全部楼层
caeser 发表于 2022-5-21 11:52
老师,能不能麻烦一个事,您写的代码我还是看得不是太懂,可以写个注释吗?谢谢

import pandas as pd                     #导入pandas,简写pd
file=r'D:\temp\测试数据样本.csv'   #赋值路径
newdf = pd.DataFrame()              #新建空数据
with open(file,'r') as f:                  #打开文件,简写f
    df = pd.read_csv(f,encoding='gb2312')      #读取文件f的数据赋值给df
    dfid = df['date'].drop_duplicates().reset_index(drop=True)      #date列数据去重,重置索引,得到需要转置数据的列索("2015年","2016年",……)引赋值给dfid
    for i in dfid:        #遍历目标(列索引)"2015年","2016年",……
        newdf[i]=df["price"].where(df["date"]==i).dropna(how='any').reset_index(drop=True)
                            #逐个读取date在列索引名“2015年"的数据“price”,删除空值,重置索引,例:newdf[”2015年“]=[4.162,4.079,……]
#最后输出成你要的格式就行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-22 14:37:21 | 显示全部楼层
elven08 发表于 2022-5-22 08:01
import pandas as pd                     #导入pandas,简写pd
file=r'D:\temp\测试数据样本.csv'   # ...

谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-22 11:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表