从不同的pandas dataFrame分组数据

时间:2015-09-15 18:17:05

标签: python-2.7 pandas dataframe

我有以下形式的不同pandas DataFrame:

dataFrame 1:

NY_resitor1 NY_resitor2 SF_resistor1 SF_resitor2 NJ_resitor1 NJ_resistor2
     45           36          36          40         20            56
     47           36          35          34         25            59
      .            .           .           .          .             .
     49           39          32          39         22            59

dataFrame 2:

NY_voltage1 NY_voltage2 SF_voltage1 SF_voltage2 NJ_voltage1 NJ_voltager2   CHI_voltage1     
     45           36          36          40         20            56         45    

     47           36          35          34         25            59

      .            .           .           .          .             .
     49           39          32          39         22            59

我想根据数据框列名的第一个字母(_之前的字母)对框架进行分组。在这个例子中,我希望有四个具有列名的DataFrame,如下所示:。

DataFrame1:

NY_resitor1 NY_resitor2 NY_voltage1 NY_voltage2

DataFrame2:

SF_resitor1 SF_resitor2 SF_voltage1 SF_voltage2

DataFrame3:

NJ_resitor1 NJ_resitor2 NJ_voltage1 NJ_voltage2

和 DataFrame4:

CHI_voltage1 

我怎样才能以有效的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以按照以下说明分组创建列MultiIndex

array = [7215,7217,7344, 3434, 4343, 43]
df1 = pd.DataFrame(np.tile(array, (len(array), 1)),columns=['NY_resitor1', 'NY_resitor2', 'SF_resistor1', 'SF_resitor2', 'NJ_resitor1', 'NJ_resistor2'])
array = [7215,7217,7344, 3434, 4343, 43, 34]
df2 = pd.DataFrame(np.tile(array, (len(array), 1)),columns=['NY_voltage1', 'NY_voltage2', 'SF_voltage1', 'SF_voltage2', 'NJ_voltage1', 'NJ_voltager2','CHI_voltage1'])

# Merging the two DataFrame
df = df1.join(df2)

# Creating a Multiindex for columns
df.columns = df.columns.str.split('_', expand=True)
# We have just to get the group from the column MultiIndex
df_group = 'NY'
data_frame_1 = df.loc[:,df_group].rename(columns = lambda x : df_group + '_' + x)
print(data_frame_1)

   NY_resitor1  NY_resitor2  NY_voltage1  NY_voltage2
0         7215         7217         7215         7217
1         7215         7217         7215         7217
2         7215         7217         7215         7217
3         7215         7217         7215         7217
4         7215         7217         7215         7217
5         7215         7217         7215         7217

等其他团体。以下是DataFrameMultiIndex的屏幕截图。 enter image description here

您也可以遍历群组。

for df_group in df.columns.get_level_values(0).unique():
    sub_df = df.loc[:,df_group].rename(columns = lambda x : df_group + '_' + x)
    print(sub_df)

   NY_resitor1  NY_resitor2  NY_voltage1  NY_voltage2
0         7215         7217         7215         7217
1         7215         7217         7215         7217
2         7215         7217         7215         7217
...
   SF_resistor1  SF_resitor2  SF_voltage1  SF_voltage2
0          7344         3434         7344         3434
1          7344         3434         7344         3434
2          7344         3434         7344         3434
...