繁体   English   中英

python,pandas,dataframe,行到列

[英]python, pandas, dataframe, rows to columns

我有一个数据帧是从一个组织不良的SQL表中提取的。 该表在每个通道上都有唯一的行,我可以将该信息提取到python数据帧中,并打算进行进一步处理,但现在只想将其转换为更可用的格式

样本输入:

C = pd.DataFrame()
A = np.array([datetime.datetime(2016,8,8,0,0,1,1000),45,'foo1',1])
B = pd.DataFrame(A.reshape(1,4),columns = ['date','chNum','chNam','value'])
C = C.append(B)
A = np.array([datetime.datetime(2016,8,8,0,0,1,1000),46,'foo2',12.3])
B = pd.DataFrame(A.reshape(1,4),columns = ['date','chNum','chNam','value'])
C = C.append(B)
A = np.array([datetime.datetime(2016,8,8,0,0,2,1000),45,'foo1',10])
B = pd.DataFrame(A.reshape(1,4),columns = ['date','chNum','chNam','value'])
C = C.append(B)
A = np.array([datetime.datetime(2016,8,8,0,0,2,1000),46,'foo2',11.3])
B = pd.DataFrame(A.reshape(1,4),columns = ['date','chNum','chNam','value'])
C = C.append(B)

产生

                             date chNum chNam value
0  2016-08-08 00:00:01.001000    45  foo1     1
0  2016-08-08 00:00:01.001000    46  foo2  12.3
0  2016-08-08 00:00:02.001000    45  foo1    10
0  2016-08-08 00:00:02.001000    46  foo2  11.3

我想要

                                 date foo1     foo2  
2016-08-08 00:00:01.001000           1     12.3
2016-08-08 00:00:02.001000           10   113

我有一个解决方案:为每个日期遍历数据框创建唯一的日期列表,并拉出每个通道,以创建新行。 有点乏味(容易出错)! 进行编程,所以我想知道是否有更好的方法来利用Pandas工具

使用set_index然后unstack转动

C.set_index(['date', 'chNum', 'chNam'])['value'].unstack(['chNam', 'chNum'])

在此处输入图片说明


准确获得您的要求

C.set_index(['date', 'chNam'])['value'].unstack().rename_axis(None, 1)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM