我正在对 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
您可以首先为 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)
| 归档时间: |
|
| 查看次数: |
1700 次 |
| 最近记录: |