Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何将数据帧从宽转换为长_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 3.x 如何将数据帧从宽转换为长

Python 3.x 如何将数据帧从宽转换为长,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有以下pandas.Dataframe: data = {'Timestamp': [12, 22], 'bmw-series1-exhaust': [0.1, 0.5], 'vw-series1-breaking': [0.7, 0.1], 'vw-series2-breaking': [0.2, 0.5]} df = pd.DataFrame(data) 对于列名转换,我使用简单函数(目前): 我想将此数据帧拆分为一个新的数据帧,该数据

我有以下
pandas.Dataframe

data = {'Timestamp': [12, 22],
        'bmw-series1-exhaust': [0.1, 0.5],
        'vw-series1-breaking': [0.7, 0.1],
        'vw-series2-breaking': [0.2, 0.5]}

df = pd.DataFrame(data)

对于列名转换,我使用简单函数(目前):

我想将此数据帧拆分为一个新的数据帧,该数据帧具有时间戳、客户和系列的多个级别索引:

我目前正在研究如何转换数据帧。我是否首先需要从拆分的数据中创建一个新的3级嵌套字典()?或者是否有某种方法可以使用内置函数来实现这一点

感谢您的帮助

  • 参见内联表示法
将熊猫作为pd导入
#你的样品
数据={'Timestamp':[12,22],'bmw-series1-detain':[0.1,0.5],'vw-series1-breaking':[0.7,0.1],'vw-series2-breaking':[0.2,0.5]}
df=pd.DataFrame(数据)
#将Timestamp设置为索引,将列堆叠成长格式,然后重置索引
dfl=df.set_index('Timestamp').stack().reset_index()
#拆分连字符上的字符串,并从每个段创建新列
dfl[['Customer','Series','Type']]=dfl.level_1.str.split('-',expand=True)
#删除level_1列
dfl=dfl.drop(列=['level_1'])
#透视长数据帧
dfp=dfl.pivot(索引=['Timestamp','Customer','Series'],columns='Type',value=0)
#删除.columns.name
dfp.columns.name=None
#显示器(dfp)
断裂排气
时间戳客户系列
12宝马系列1 NaN 0.1
大众系列1 0.7 NaN
系列2 0.2 NaN
22宝马系列1 NaN 0.5
大众系列1 0.1 NaN
系列2 0.5 NaN

首先将所有列转换为无
-
的索引,在列中创建
多索引,并按第一级和第二级重塑,最后添加
多索引名称

df = pd.DataFrame({'Timestamp': [12, 22], 
                   'bmw-series1-exhaust': [0.1, 0.5],
                   'vw-series1-breaking': [0.7, 0.1], 
                   'vw-series2-breaking': [0.2, 0.5]})

df1 = df.set_index('Timestamp')
df1.columns = df1.columns.str.split('-', expand=True)
df1 = df1.stack([0,1]).rename_axis(['Timestamp', 'Customer','Series'])
print (df1)
                            breaking  exhaust
Timestamp Customer Series                    
12        bmw      series1       NaN      0.1
          vw       series1       0.7      NaN
                   series2       0.2      NaN
22        bmw      series1       NaN      0.5
          vw       series1       0.1      NaN
                   series2       0.5      NaN
df = pd.DataFrame({'Timestamp': [12, 22], 
                   'bmw-series1-exhaust': [0.1, 0.5],
                   'vw-series1-breaking': [0.7, 0.1], 
                   'vw-series2-breaking': [0.2, 0.5]})

df1 = df.set_index('Timestamp')
df1.columns = df1.columns.str.split('-', expand=True)
df1 = df1.stack([0,1]).rename_axis(['Timestamp', 'Customer','Series'])
print (df1)
                            breaking  exhaust
Timestamp Customer Series                    
12        bmw      series1       NaN      0.1
          vw       series1       0.7      NaN
                   series2       0.2      NaN
22        bmw      series1       NaN      0.5
          vw       series1       0.1      NaN
                   series2       0.5      NaN