gpt4 book ai didi

python - 合并数据帧保持多索引

转载 作者:行者123 更新时间:2023-12-01 06:33:40 25 4
gpt4 key购买 nike

我有两个数据框,df1df2。一个具有多索引,例如 ['A', 'B'],另一个具有单个索引 ['B']。我想通过索引 'B' 将数据从 df2 合并到 df1 中,同时保留我的多索引 ['A' ,'B']。我该怎么办?

请参阅下面的示例

data = {
'state': ['California', 'New York', 'Texas'],
'capital': ['Sacramento', 'Albany', 'Austin'],
}
df_state = pd.DataFrame.from_dict(data).set_index('state')

data = {
'state': ['California', 'California', 'New York', 'New York', 'Texas', 'Texas'],
'year': [2000, 2010, 2000, 2010, 2000, 2010],
'population': [33871648, 37253956, 18976457, 19378102, 20851820, 25145561],
}
df_state_year = pd.DataFrame.from_dict(data).set_index(['state', 'year'])

df_state_year.merge(df_state['capital'], on=['state'], how='left')

结果是一个具有单个索引“状态”的数据帧。我想保留原来的多索引['state', 'year']。

使用斯科特·波士顿的答案,我最终得到了

df_state_year.reset_index()\
.merge(df_state['capital'], on=['state'], how='left')\
.set_index(['state', 'year'])

这可能是版本差异,但合并似乎完全删除了我的索引。所以只有重置年份才能使状态指数消失。我删除附加的原因是我不希望额外的自动编号字段成为我的索引的一部分。

最佳答案

在这个例子中,我可能会这样做:

df_state_year['capital'] = df_state_year.index.get_level_values(0).map(df_state.squeeze())

输出:

                 population     capital
state year
California 2000 33871648 Sacramento
2010 37253956 Sacramento
New York 2000 18976457 Albany
2010 19378102 Albany
Texas 2000 20851820 Austin
2010 25145561 Austin
<小时/>

或者

df_state_year.reset_index(level=1)\
.merge(df_state['capital'], on=['state'], how='left')\
.set_index('year', append=True)

输出:

                 population     capital
state year
California 2000 33871648 Sacramento
2010 37253956 Sacramento
New York 2000 18976457 Albany
2010 19378102 Albany
Texas 2000 20851820 Austin
2010 25145561 Austin
<小时/>

或者

df_state.align(df_state_year, axis=0)[0].join(df_state_year)

输出:

                    capital  population
state year
California 2000 Sacramento 33871648
2010 Sacramento 37253956
New York 2000 Albany 18976457
2010 Albany 19378102
Texas 2000 Austin 20851820
2010 Austin 25145561

关于python - 合并数据帧保持多索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59772300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com