如何遍历列表并将其整齐地附加到一个空的数据框中?

时间:2019-03-27 18:35:39

标签: python python-3.x pandas

我有一个数据框,我想从中提取一些数据并将其附加到新的数据结构中。

使用的数据是几年,有些单位是每小时的数据。 我还附加了一些代码以突出显示该结构。

我想做的是尽可能地“自动化”该过程,以便可以将.csv文件更改为具有相同结构/标题的另一个文件。

现在我的新数据框看起来有点不好...

我还试图排除一些年份,仅提供2018年的数据,不确定我是否以正确的方式进行操作。

我尝试进行连接,但效果很好,但这很手工。 我不得不用手动短语将其拆分,然后将其连接起来,这似乎是一个糟糕的解决方案。但是,当我现在在图形中运行它时,我确实得到了想要的输出,我只是觉得数据框应该更好。

它们都具有相同的索引值“小时”,而有些则在一天中的某些时间段具有空白字段。

df_hourly = pd.read_csv('hourlydatafrom2015.txt')

    test_name   unit_name   value   units   Year    Week    Hour
0   35 - Test1  Unit1   814 11  2015    1   11
1   35 - Test1  Unit1   1837    14  2015    1   12
2   35 - Test1  Unit1   5333    41  2015    1   13
3   35 - Test1  Unit1   9726    70  2015    1   14
4   35 - Test1  Unit1   9021    66  2015    1   15

df_hourly = df_hourly[df_hourly.Year > 2018]
df_hourly.loc[df_hourly['Year'] > 2018]

unit_names = df_hourly['unit_name'].unique().tolist()

def single_sorter(name):
    tester_total_units_per_hour = df_hourly[df_hourly['unit_name'] == name].groupby('Hour')[['units']].sum()
    tester_total_units = df_hourly['units'][df_hourly['unit_name'] == name].sum()
    new_tester_units = tester_total_units_per_hour / tester_total_units
    new_tester_units.rename(columns={'units' : '{} units'.format(name)}, inplace=True)
    test_1 = new_tester_units


    return test_1

newer_data_frame = pd.DataFrame ()

for value in unit_names:
    newer_data_frame = newer_data_frame.append(single_sorter(value), ignore_index=False, sort=False)



print(newer_data_frame)

      Unit1 units  nan units  Unit3 units  Unit5 units  Unit2 units  \
Hour                                                                  
9        0.000231        NaN          NaN          NaN          NaN   
10       0.025275        NaN          NaN          NaN          NaN   
11       0.058652        NaN          NaN          NaN          NaN   
12       0.076798        NaN          NaN          NaN          NaN   
13       0.080039        NaN          NaN          NaN          NaN   
14       0.091195        NaN          NaN          NaN          NaN   
15       0.115776        NaN          NaN          NaN          NaN   
16       0.141468        NaN          NaN          NaN          NaN   
17       0.135034        NaN          NaN          NaN          NaN   
18       0.104388        NaN          NaN          NaN          NaN   
19       0.080965        NaN          NaN          NaN          NaN   
20       0.061707        NaN          NaN          NaN          NaN   
21       0.028470        NaN          NaN          NaN          NaN   
7             NaN        NaN     0.036825          NaN          NaN   
8             NaN        NaN     0.032389          NaN          NaN   
9             NaN        NaN     0.048226          NaN          NaN  

列表继续,因此似乎在下面添加了索引值,而不是使用相同的索引值。我希望索引索引值介于07-21之间的数据框,然后旁边的每个单元都有行。

我是一个试图转换为Python的Excel书呆子,所以这可能是解决这个问题的一种非常艰难/糟糕的方法...在制作函数之前看起来更糟...

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

结果正常:append用于将新行追加到数据框。如果要追加列,则应使用mergejoin。由于结果数据框应以Hour列作为索引,因此我建议使用newer_data_frame以来所有不同的小时数来初始化df_hourly,并始终加入single_sorter的结果。

代码将变为:

...
newer_data_frame = pd.DataFrame(df_hourly.Hour.drop_duplicates()).set_index('Hour')

for value in unit_names:
    newer_data_frame = newer_data_frame.join(single_sorter(value))
...