根据现有的常规索引数据框架创建多级索引数据框架

时间:2018-07-20 05:12:44

标签: python pandas dataframe

我已经从Excel电子表格中导入了一组数据,现在有了常规的DataFrame。

这是我原始数据框的样子:

Meter Number    Site Name   Size
123             Site A      1
456             Site B      10

现在,我必须为每个仪表增加每月的能量输出值。这意味着我需要为数据框中的每个现有行添加12行。为了简单起见,每个现有行的12行可以相同,但是要根据数组的大小进行缩放。因此,我需要新的DataFrame看起来像下表。稍后,我将把它与站点的测量数据进行比较。

有没有人建议如何使用Pandas完成此任务? 这是新DataFrame的外观。

Meter Number    Site Name   Size   Month   Expected Energy
123             Site A      1      Jan     .2
123             Site A      1      Feb     .3
...             ...         ...    ...     ...
123             Site A      1      Dec     .25
456             Site B      10     Jan      2.0
456             Site B      10     Feb      3.0
...             ...         ...    ...      ...
456             Site B      10     Dec      2.5

我浏览了有关合并DataFrame的Pandas文档以及MultiIndex指南,但是我无法弄清楚如何完成此任务。

每月的期望值列表可以存储为字典,列表或numpy数组。我现在要手动输入。

monthly_values = {'Jan': 0.2, 'Feb': 0.3, ... 'Dec': 0.25}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

下面是可以为您提供所需值的代码。(虽然有点难看)

meter = pd.DataFrame({'Meter Number': [123,456], 'Site Number': ['A','B'], 'Size' : [1,10]}) # creating dataframe
meter = meter.reindex(meter.index.repeat(12)) # expanding the dataframe as mentioned
meter['Month'] = list(range(1,len(meter)+1)) # generating Month column with numbers

t = len(meter) // 12 
month = list(range(1,13)) # dummy list with month numbers. Enter month names insted of numbers if you required
meter.Month = month*t #assigning month numbers to the Month column

我正在创建具有随机数的Monthly_values数据框,因为我没有实际值。

monthly_values = meter[['Meter Number', 'Month']] # taking required 2 columns
monthly_values['Expected Energy'] = np.random.randint(2, 25, len(monthly_values)) # generating random energy values
final_OP = pd.merge(meter, monthly_values)[['Meter Number', 'Site Number', 'Month', 'Expected Energy']] # merging the required columns

您可以使用实际值编辑Expected Energy数据框中的monthly_values列,然后与meter数据帧合并。