如何在Python中有效清除面板数据?

问题描述 投票:0回答:1

我正在转换面板数据。我的原始数据是df,我想将其转换为df2。 Price_1表示1月的价格。Price_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
varName = df['variable_name'].unique()
varName2=[]

for j in varName:
for i in month1:
    t = j + '_' + str(i)
    varName2.append(t)

x = df.value
indexName = df['item'].unique()
m = indexName.shape[0]
n = len(varName2) 
df3 = pd.DataFrame(x.values.reshape(m, n), index = indexName, columns = varName2)

我的问题:将来数据会更多(大约2GB)。所以我想知道如何在python中有效地转换数据? (我的解决方案似乎效果不佳)。不必非常高效,并且优先使用主流库中的功能。谢谢。

python dataframe panel
1个回答
0
投票
df.set_index(['item', 
              df.variable_name + '_' + df.month.apply(str)]
)['value'].unstack().reset_index()

您想要的列名称是variable_namemonth的串联。

因此,要实现这一点,请将item和串联表达式设置为索引,将unstack设置为枢轴,最后设置为reset_index

© www.soinside.com 2019 - 2024. All rights reserved.