如何在Python中高效地清理面板数据?
我正在转换面板数据。我的原始数据是df,我想把它转换成df2。价格_1表示1月份的价格。价格_2表示2月份的价格,依此类推。这是我的解决方案,我的结果是df3如何在Python中高效地清理面板数据?,python,dataframe,panel,Python,Dataframe,Panel,我正在转换面板数据。我的原始数据是df,我想把它转换成df2。价格_1表示1月份的价格。价格_2表示2月份的价格,依此类推。这是我的解决方案,我的结果是df3 import numpy as np import pandas as pd df = pd.DataFrame({'item': ['a', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'c', 'c'],
import numpy as np
import pandas as pd
df = pd.DataFrame({'item': ['a', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'c', 'c'],
'month': [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
'variable_name': ['price', 'price', 'price', 'quantity', 'quantity', 'quantity', 'price', 'price', 'price', 'quantity', 'quantity', 'quantity', 'price', 'price', 'price', 'quantity', 'quantity', 'quantity'],
'value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 ,18]
})
df2 = pd.DataFrame({'item': ['a', 'b', 'c'],
'price_1': [1, 7, 13],
'price_2': [2, 8, 14],
'price_3': [3, 9, 15],
'quantity_1': [4, 10, 16],
'quantity_2': [5, 11, 17],
'quantity_3': [6, 12, 18]
})
我的解决办法是:
month1 = df['month'].unique()
#date1 = pd.DatetimeIndex(date1)
#month1 = date1.month
var_name = df['variable_name'].unique()
var_name2=[]
for j in var_name:
for i in month1:
t = j + '_' + str(i)
var_name2.append(t)
x = df.value
index_name = df['item'].unique()
m = index_name.shape[0]
n = len(var_name2)
df3 = pd.DataFrame(x.values.reshape(m, n), index = index_name, columns = var_name2)
我的问题是:未来的数据会更多(大约2GB)。所以我想知道如何在python中高效地转换数据?(我的解决方案似乎效果不佳)。不需要非常高效,最好在流行的库中使用。多谢各位
df.set_index(['item',
df.variable_name + '_' + df.month.apply(str)]
)['value'].unstack().reset_index()
您需要的列名是variable\u name
和month
的串联
因此,要实现这一点,请将
项
&串联表达式设置为索引,取消堆栈
设置为枢轴,最后重置索引
变量和函数名称应遵循带有下划线的小写形式
。请解释程序是如何工作的/它是做什么的,这样其他人就不会被迫对其进行反向工程。这也可能是值得分享一些更多的上下文。我很抱歉迟答复。防火墙挡住了我。谢谢你的回答。但是我试着用你的解来计算执行时间。看来你的解决方案需要更长的时间。你比较过执行时间了吗?