我有以下形式的不同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
我怎样才能以有效的方式做到这一点?
答案 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
等其他团体。以下是DataFrame
与MultiIndex
的屏幕截图。
您也可以遍历群组。
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
...