python - 加入带有多索引的熊猫表
问题描述
我有两个要加入的表 - 主表有 index SourceID
,子表是多索引的,因为它来自数据透视表 - 索引是(SourceID, sourceid)
如何将具有单个索引的表连接到具有多索引的表(或将多索引表更改为单数)?
子表创建如下:
d = {'SourceID': [1, 1, 2, 2, 3, 3, 3], 'Year': [0, 1, 0, 1, 1, 2, 3], 'Sales': [100, 200, 300, 400 , 500, 600, 700], 'Profit': [10, 20, 30, 40, 50, 60, 70]}
df = pd.DataFrame(data=d)
df_sub = (
df
.pivot_table(
index=['SourceID'],
columns=['Year'],
values=['Sales', 'Profit'],
fill_value=0,
aggfunc='mean'
)
# .add_prefix('sales_')
.reset_index()
)
L = [(a, f'{a.lower()}{b}') for a, b in df_sub.columns]
df_sub.columns = pd.MultiIndex.from_tuples(L)
df_sub = df_sub.reset_index()
然后我试图将它与主表连接起来df_main
df_all = df_sub.join(df_main.set_index('SourceID'), on='SourceID.sourceid')
但这由于多索引而失败。只要我不丢失其他字段上的多索引,子表中的索引可以是单一的。
解决方案
这是可能的,但是 MultiIndex 值被转换为元组:
df_all = df_sub.join(df.set_index('SourceID'), on=[('SourceID','sourceid')])
print (df_all)
如果需要MultiIndex
输出也需要将df
列转换为MultiIndex
,例如MultiIndex.from_product
:
df1 = df.copy()
df1.columns = pd.MultiIndex.from_product([['orig'], df1.columns])
df_all = df_sub.join(df1.set_index([('orig','SourceID')]), on=[('SourceID','sourceid')])
推荐阅读
- php - SSH to Fortigate firewall failing using phpseclib
- javascript - 从 JSON 中获取图像
- git - Git: Keep system generated/modifed files unaffected my commits
- javascript - How to connect the Redux store to a dynamically created components outside root?
- python - XML writing- new file
- python - Changing Key name in mongodb based on its value
- r - 根据R中的条件根据最大值填充一列
- javascript - Phonegap / Cordova Push Notification not waking up screen
- javascript - Javascript - 检测对象数组中的反向对
- debugging - 在 Visual Studio Code 中找不到 Flutter Inspector / Toggle Debug Paint