caeser 发表于 2022-5-19 21:55:44

求助各位老师,按照年份进行行列转置?

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

求助各位老师,我怎么把原始数据格式按照年份进行行列转置?

Twilight6 发表于 2022-5-19 22:19:57



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

wp231957 发表于 2022-5-20 07:03:12

恐怕还得自己写vba代码
现成的转置都不符合你的要求

elven08 发表于 2022-5-20 09:01:29

一、简单的方法用excel数据透视表。1.在B列插入一列序号“num”,B2输入公式“=COUNTIF($A$2:A2,A2)”向下填充。2.依次选择“插入”、“数据透视表”、“确定”。3.数据透视表字段对应选择,列“date”,行“num”,值“price”,OVER.
二、用pandas思路,A列去重当列索引,依次提取拼接。

elven08 发表于 2022-5-20 09:37:21

import pandas as pd
file=r'D:\temp\测试数据样本.csv'
newdf = pd.DataFrame()
with open(file,'r') as f:
    df = pd.read_csv(f,encoding='gb2312')
    dfid = df['date'].drop_duplicates().reset_index(drop=True)
    for i in dfid:
      newdf=df["price"].where(df["date"]==i).dropna(how='any').reset_index(drop=True)

qq1151985918 发表于 2022-5-20 09:59:22

import csv
from itertools import zip_longest

def readcsv(filepath):
    data = {}
    with open(filepath,'r') as f:
      reader = csv.reader(f)
      for row in reader:
                if row not in data:
                  data] = []
                data].append(row[-1])
    return data

def writecsv(filepath, data):
    with open(filepath, 'w', newline='') as f:
      writer = csv.DictWriter(f, data.keys())
      writer.writeheader()
      write_datas = []
      for each in zip_longest(*data.values(), fillvalue=''):
            write_datas.append(dict(zip(data.keys(), each)))
      writer.writerows(write_datas)
            
if __name__ == '__main__':
    result = readcsv('./test.csv')
    writecsv('./result.csv', result)

caeser 发表于 2022-5-20 13:46:25

Twilight6 发表于 2022-5-19 22:19
你发出来的数据就是转置后的...

不好意思,疏忽了

caeser 发表于 2022-5-20 13:47:09

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

谢谢,excel,我能搞定的。但pandas不会。

caeser 发表于 2022-5-20 13:48:26

qq1151985918 发表于 2022-5-20 09:59


非常感谢大神老师,可惜最佳答案只能设置一个,抱歉了

caeser 发表于 2022-5-21 11:52:50

elven08 发表于 2022-5-20 09:37


老师,能不能麻烦一个事,您写的代码我还是看得不是太懂,可以写个注释吗?谢谢

elven08 发表于 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=df["price"].where(df["date"]==i).dropna(how='any').reset_index(drop=True)
                            #逐个读取date在列索引名“2015年"的数据“price”,删除空值,重置索引,例:newdf[”2015年“]=
#最后输出成你要的格式就行。

caeser 发表于 2022-5-22 14:37:21

elven08 发表于 2022-5-22 08:01
import pandas as pd                     #导入pandas,简写pd
file=r'D:\temp\测试数据样本.csv'   # ...

谢谢!
页: [1]
查看完整版本: 求助各位老师,按照年份进行行列转置?