Python 使用熊猫旋转数据帧
我通过Python 使用熊猫旋转数据帧,python,numpy,pandas,Python,Numpy,Pandas,我通过pandas.read_html Column0 Column1 Column2 Column3 0 Entry_1 0.685 Record_1 0.69-S$ 0.685 1 Entry_2 0.036 Record_2 0.685 2 Entry_3 05/Jul/2016 Record_3 0.72-S$ 0.4 3 Entry_4 0
pandas.read_html
Column0 Column1 Column2 Column3
0 Entry_1 0.685 Record_1 0.69-S$ 0.685
1 Entry_2 0.036 Record_2 0.685
2 Entry_3 05/Jul/2016 Record_3 0.72-S$ 0.4
3 Entry_4 0.338 Record_4 178.8 mm
4 Entry_5 0.41 Record_5 0.06
5 Entry_6 122.48 Record_6 17.29%
6 Entry_7 0.5 Record_7 0.58 as of 05/Jul/2016
如何对该数据进行pviot/转换,使
列0
成为标题,列1
成为值。类似地,对于第2列
和第3列
?我建议您使用以下示例中的方法:
import pandas as pd
import numpy as np
import pandas.util.testing as tm; tm.N = 3
def unpivot(frame):
N, K = frame.shape
data = {'value' : frame.values.ravel('F'),
'variable' : np.asarray(frame.columns).repeat(N),
'date' : np.tile(np.asarray(frame.index), K)}
return pd.DataFrame(data, columns=['date', 'variable', 'value'])
df = unpivot(tm.makeTimeDataFrame())
print (df)
print (df.pivot(index='date', columns='variable', values='value'))
打印(df):日期变量值
0 2000-01-03 A 0.101495
1 2000-01-04 A-0.554863
2000-01-05A-0.345271
3200-01-03B-1.104909
4 2000-01-04 B-0.723819
52000-01-05B0.088401
6 2000-01-03 C 1.495768
7 2000-01-04 C-0.756166
8 2000-01-05 C-0.266072
9 2000-01-03 D 0.451050
102000-01-04D-1.457763
11 2000-01-05 D 0.945552
打印(df.pivot(index='date',columns='variable',values='value')):
变量A B C D
日期
2000-01-03 2.932572-1.959961 0.385705-1.629831
2000-01-04-0.317548 0.0310412.129526-1.717546
2000-01-05 0.108186 1.182527 0.997716 0.453127
我建议您使用以下示例中的方法:
import pandas as pd
import numpy as np
import pandas.util.testing as tm; tm.N = 3
def unpivot(frame):
N, K = frame.shape
data = {'value' : frame.values.ravel('F'),
'variable' : np.asarray(frame.columns).repeat(N),
'date' : np.tile(np.asarray(frame.index), K)}
return pd.DataFrame(data, columns=['date', 'variable', 'value'])
df = unpivot(tm.makeTimeDataFrame())
print (df)
print (df.pivot(index='date', columns='variable', values='value'))
打印(df):日期变量值
0 2000-01-03 A 0.101495
1 2000-01-04 A-0.554863
2000-01-05A-0.345271
3200-01-03B-1.104909
42000-01-04b-0.723819
52000-01-05B0.088401
6 2000-01-03 C 1.495768
7 2000-01-04 C-0.756166
8 2000-01-05 C-0.266072
9 2000-01-03 D 0.451050
102000-01-04D-1.457763
11 2000-01-05 D 0.945552
打印(df.pivot(index='date',columns='variable',values='value')):
变量A B C D
日期
2000-01-03 2.932572-1.959961 0.385705-1.629831
2000-01-04-0.317548 0.0310412.129526-1.717546
2000-01-05 0.108186 1.182527 0.997716 0.453127
您可以使用
lreshape
创建新列,然后从Col
中,通过转置和最后删除列名(在pandas
中新增0.18.0
):
您可以使用
lreshape
创建新列,然后从Col
中,通过转置和最后删除列名(在pandas
中新增0.18.0
):
这可能是解决这个问题最简单的方法。无论如何,这是我能想到的最简单的方法
Column0 Column1 Column2 Column3
0 Entry_1 0.685 Record_1 0.69-S$ 0.685
1 Entry_2 0.036 Record_2 0.685
2 Entry_3 05/Jul/2016 Record_3 0.72-S$ 0.4
3 Entry_4 0.338 Record_4 178.8 mm
4 Entry_5 0.41 Record_5 0.06
5 Entry_6 122.48 Record_6 17.29%
6 Entry_7 0.5 Record_7 0.58 as of 05/Jul/2016
cols = df['Column0'].append(df['Column2'])
vals = df['Column1'].append(df['Column3'])
newdf = pd.DataFrame(vals).T
newdf.columns = cols
newdf
Entry_1 Entry_2 Entry_3 Entry_4 Entry_5 Entry_6 Entry_7 Record_1 Record_2 Record_3 Record_4 Record_5 Record_6 Record_7
0 0.685 0.036 05/Jul/2016 0.338 0.41 122.48 0.5 0.69-S$ 0.685 0.685 0.72-S$ 0.4 178.8 mm 0.06 17.29% 0.58 as of 05/Jul/2016
这可能是解决这个问题最简单的方法。无论如何,这是我能想到的最简单的方法
Column0 Column1 Column2 Column3
0 Entry_1 0.685 Record_1 0.69-S$ 0.685
1 Entry_2 0.036 Record_2 0.685
2 Entry_3 05/Jul/2016 Record_3 0.72-S$ 0.4
3 Entry_4 0.338 Record_4 178.8 mm
4 Entry_5 0.41 Record_5 0.06
5 Entry_6 122.48 Record_6 17.29%
6 Entry_7 0.5 Record_7 0.58 as of 05/Jul/2016
cols = df['Column0'].append(df['Column2'])
vals = df['Column1'].append(df['Column3'])
newdf = pd.DataFrame(vals).T
newdf.columns = cols
newdf
Entry_1 Entry_2 Entry_3 Entry_4 Entry_5 Entry_6 Entry_7 Record_1 Record_2 Record_3 Record_4 Record_5 Record_6 Record_7
0 0.685 0.036 05/Jul/2016 0.338 0.41 122.48 0.5 0.69-S$ 0.685 0.685 0.72-S$ 0.4 178.8 mm 0.06 17.29% 0.58 as of 05/Jul/2016
这是两个数据帧?要合并它们,然后转置合并的数据帧吗?不。这是一个数据帧。这是我打印pandas.read_html输出时得到的代码。我想将
第0列
和第2列
作为第1列
和第3列
中的值的标题,这是两个数据帧?要合并它们,然后转置合并的数据帧吗?不。这是一个数据帧。这是我打印pandas.read_html输出时得到的代码。我想将第0列
和第2列
作为第1列
和第3列
中的值的标题,那么我应该如何从上面发布的数据中写入它呢?对这个很陌生,那么我应该如何根据我上面发布的数据来写呢?这很新鲜谢谢耶斯雷尔!:)如果您愿意,您可以向上投票;-)谢谢。谢谢你,耶斯雷尔!:)如果您愿意,您可以向上投票;-)谢谢,谢谢乔。这有用:)谢谢乔。这是有效的:)