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