Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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中高效地清理面板数据?_Python_Dataframe_Panel - Fatal编程技术网

如何在Python中高效地清理面板数据?

如何在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'],

我正在转换面板数据。我的原始数据是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'],
               '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
的串联


因此,要实现这一点,请将
&串联表达式设置为索引,
取消堆栈
设置为枢轴,最后
重置索引

变量和函数名称应遵循带有下划线的
小写形式
。请解释程序是如何工作的/它是做什么的,这样其他人就不会被迫对其进行反向工程。这也可能是值得分享一些更多的上下文。我很抱歉迟答复。防火墙挡住了我。谢谢你的回答。但是我试着用你的解来计算执行时间。看来你的解决方案需要更长的时间。你比较过执行时间了吗?