The*_*era 131 python flatten multi-index dataframe pandas
我有一个包含2个索引级别的数据框:
value
Trial measurement
1 0 13
1 3
2 4
2 0 NaN
1 12
3 0 34
Run Code Online (Sandbox Code Playgroud)
我想转变成这个:
Trial measurement value
1 0 13
1 1 3
1 2 4
2 0 NaN
2 1 12
3 0 34
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能做到最好?
我需要这个,因为我想按照这里的指示聚合数据,但如果它们被用作索引,我就无法选择我的列.
小智 164
所述reset_index()是一个数据帧熊猫方法,将索引值转移到数据帧为列.参数的默认设置是drop = False(将索引值保留为列).
您只需.reset_index(inplace=True)在DataFrame的名称后添加:
df.reset_index(inplace=True)
Run Code Online (Sandbox Code Playgroud)
Kar*_*nka 16
这并不适用于你的情况,但它可能对其他人(比如我5分钟前)有所帮助.如果一个人的多索引具有如下相同的名称:
value
Trial Trial
1 0 13
1 3
2 4
2 0 NaN
1 12
3 0 34
Run Code Online (Sandbox Code Playgroud)
df.reset_index(inplace=True) 将失败,因为创建的列不能共享名称.
那么你需要重命名多索引df.index = df.index.set_names(['Trial', 'measurement'])来得到:
value
Trial measurement
1 0 13
1 1 3
1 2 4
2 0 NaN
2 1 12
3 0 34
Run Code Online (Sandbox Code Playgroud)
然后df.reset_index(inplace=True)就会像魅力一样工作.
在按日期时间列(而不是索引)调用后按年和月分组时遇到此问题live_date,这意味着年份和月份都已命名live_date.
可能存在df.reset_index()无法使用的情况(例如,当您也需要索引时)。在这种情况下,使用index.get_level_values()直接访问索引值:
df['Trial'] = df.index.get_level_values(0)
df['measurement'] = df.index.get_level_values(1)
Run Code Online (Sandbox Code Playgroud)
这会将索引值分配给各个列并保留索引。
有关更多信息,请参阅文档。
我也遇到了卡尔的问题。我刚刚发现自己重命名了聚合列,然后重置了索引。
df = pd.DataFrame(df.groupby(['arms', 'success'])['success'].sum()).rename(columns={'success':'sum'})
Run Code Online (Sandbox Code Playgroud)
df = df.reset_index()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84968 次 |
| 最近记录: |