Python 抹去数据帧
假设我有一个简单的数据框,如下所示:Python 抹去数据帧,python,dataframe,Python,Dataframe,假设我有一个简单的数据框,如下所示: import pandas as pd data = [['3m',10, 12],['1y',12, 8.5],['2y',13, 4.6]] df = pd.DataFrame(data,columns=['Term', '3m','1y']) 将其转换为以下内容的最简单方法是什么: data = [['3m','3m', 10],['3m','1y', 12],['1y','3m', 12], ['1y','1y', 8.5], ['2y','3m'
import pandas as pd
data = [['3m',10, 12],['1y',12, 8.5],['2y',13, 4.6]]
df = pd.DataFrame(data,columns=['Term', '3m','1y'])
将其转换为以下内容的最简单方法是什么:
data = [['3m','3m', 10],['3m','1y', 12],['1y','3m', 12], ['1y','1y', 8.5], ['2y','3m', 13], ['2y','1y', 4.6]]
df = pd.DataFrame(data,columns=['Term', 'Term','metric'])
我需要为具有更多列的数据帧执行此操作,因此我正在寻找一种简单的方法来实现此目的
谢谢 编辑:无内存密集型lambda/apply的单行解决方案:
pd.DataFrame(df1.set_index('Term').unstack().swaplevel()).reset_index()
Term level_1 0
0 3m 3m 10.0
1 1y 3m 12.0
2 2y 3m 13.0
3 3m 1y 12.0
4 1y 1y 8.5
5 2y 1y 4.6
这是一个多步骤解决方案,使用itertools.product获得现有索引和列值的组合,使用df.applylambda在原始df中查找值。我猜有更有效的方法:
import pandas as pd
from itertools import product
data = [['3m',10, 12],['1y',12, 8.5],['2y',13, 4.6]]
df1 = pd.DataFrame(data,columns=['Term', '3m','1y'])
Term 3m 1y
0 3m 10 12.0
1 1y 12 8.5
2 2y 13 4.6
df3=pd.DataFrame(list(product(df1['Term'].values,df1.columns[1:])), columns=['term1','term2'])
term1 term2
0 3m 3m
1 3m 1y
2 1y 3m
3 1y 1y
4 2y 3m
5 2y 1y
df3['metric']=df3.apply(lambda x:df1.set_index('Term').loc[x[0],x[1]], axis=1)
term1 term2 metric
0 3m 3m 10.0
1 3m 1y 12.0
2 1y 3m 12.0
3 1y 1y 8.5
4 2y 3m 13.0
5 2y 1y 4.6
使用更简单的解决方案进行编辑