Pandas groupby-apply:不能从重复的轴重新索引

use*_*621 5 join pandas

我正在对 DataFrame 执行 groupby 操作。在每个组上,我必须重命名两列并删除一列,以便每个组具有以下形式:

index(timestamp) | column-x | column-y
...              |  ....    | ..... 
Run Code Online (Sandbox Code Playgroud)

索引是一个时间戳,它对每个组都是通用的。'column-x' 和 'column-y' 将因每个组而不同。我的目标是加入索引上的所有组,以便我拥有一个唯一的 DataFrame,例如:

index(timestamp) | column-x1 | column-y1 | column-x2 | column-y2 | ...
...              |  .....    | ......    |  .......  | .......   | ...
Run Code Online (Sandbox Code Playgroud)

我应用于每个组的功能是(我可以在迭代时对组进行就地编辑吗?):

def process_ssp(df_ssp):
    sensor_name = df_ssp.iloc[0]['subsystem-sensor-parameter'] # to be used as column name
    df_ssp.rename(columns = {
        'value_raw': '%s_raw' % sensor_name,
        'value_hrf': '%s_hrf' % sensor_name,
    }, inplace = True)
    df_ssp.drop('subsystem-sensor-parameter', axis='columns', inplace=True) # since this is the column I am grouping on I guess this isn't the right thing to do?
    return df_ssp
Run Code Online (Sandbox Code Playgroud)

然后我打电话:

res = df_node.groupby('subsystem-sensor-parameter', as_index=False).apply(process_ssp)
Run Code Online (Sandbox Code Playgroud)

产生错误:

ValueError: cannot reindex from a duplicate axis
Run Code Online (Sandbox Code Playgroud)

编辑:数据集示例https://drive.google.com/file/d/1RvPE1t3BmjeaqCNkVqGwmokCFQQp77n8/view?usp=sharing

jez*_*ael 1

您可以首先为 MultiIndex 添加列subsystem-sensor-parameter,通过 重塑unstack,按第二级对列中的 MultiIndex 进行排序并更改它们的位置。最后通过使用map和进行展平来转换 MultiIndex join

res = (df_node.set_index('subsystem-sensor-parameter', append=True)
                          .unstack()
                          .sort_index(axis=1, level=1)
                          .swaplevel(0,1, axis=1)) 
res.columns = res.columns.map('_'.join)
Run Code Online (Sandbox Code Playgroud)