You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并含重复索引的DataFrame与分组Series及分组查询方法

问题

需要将以下df1与series_object进行合并,具体要求及数据如下:

df1数据

wallet       cumulative_rewards  position      position_rewards  position_type
0      0x12345                       0      LUSD      1000              LP Pair
0      0x12345                       0      TOKE      200               LP Token
1      0xabcde                       0    UNI_LP      500               LP
1      0xabcde                       0  SUSHI_LP      0                 LP
1      0xabcde                       0       DAI      100               LP Pair

series_object数据

该对象由grouped_toke_transfers = toke_transfers_df.groupby('from_address')['value'].sum()生成,索引为from_address,数据如下:

from_address   value
0x12345        13687137402763990447827
0xabcde        58950104860666120622
0xfghij        3491287228881431880579
0xklmno        1260986666816869789

合并要求

  • 保留df1中重复出现的钱包(即重复索引对应的钱包);
  • 将series_object中对应钱包的value添加到每一行,同一钱包的所有行value值相同;
  • 合并后的DataFrame不包含df1中在series_object里不存在的钱包。

额外需求

基于合并后的表格,如何使用groupby()根据position_type查询对应的value?

解决方案

一、合并DataFrame与Series

先将Series转换为DataFrame并对齐列名,再用内连接完成合并,既保留df1的重复行,又自动过滤掉series中不存在的钱包:

import pandas as pd

# 将Series转为DataFrame,并重命名索引列为'wallet',和df1的列名匹配
series_df = grouped_toke_transfers.reset_index().rename(columns={'from_address': 'wallet'})

# 执行内连接合并
merged_df = pd.merge(df1, series_df, on='wallet', how='inner')

合并后merged_df的结构示例(符合所有要求):

wallet  cumulative_rewards  position  position_rewards position_type                  value
0      0x12345                   0      LUSD              1000        LP Pair  13687137402763990447827
1      0x12345                   0      TOKE               200     LP Token  13687137402763990447827
2      0xabcde                   0    UNI_LP               500            LP    58950104860666120622
3      0xabcde                   0  SUSHI_LP                 0            LP    58950104860666120622
4      0xabcde                   0       DAI               100        LP Pair    58950104860666120622

二、按position_type分组查询value

根据实际需求选择对应的聚合方式:

1. 统计每个position_type对应的value总和

如果需要将同一类型下所有钱包的value相加:

type_value_sum = merged_df.groupby('position_type')['value'].sum().reset_index()

2. 获取每个position_type对应的唯一value(去重)

如果同一position_type下的value不重复,或者只需要保留每个类型下的不同value:

# 取每个分组的第一个value
type_unique_value = merged_df.groupby('position_type')['value'].first().reset_index()

# 或者返回该类型下所有唯一value的列表
type_unique_values = merged_df.groupby('position_type')['value'].unique().reset_index()

3. 查看每个position_type对应的所有value明细

如果需要保留每个类型下的全部value记录:

type_value_details = merged_df.groupby('position_type')['value'].apply(list).reset_index()

内容的提问来源于stack exchange,提问作者Luiz Scheuer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:50:29