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

如何实现value_counts逆操作:从计数列生成重复值序列?

问题描述

我有一个包含两列的DataFrame,结构如下:

diametercounts
1.13
2.31
3.01
5.02
10.01

需要将其重新格式化为包含每个diameter重复对应counts次数的完整列表(或数组/DataFrame),期望输出:[1.1, 1.1, 1.1, 2.3, 3.0, 5.0, 5.0, 10.0]。

已知value_counts可以从序列得到计数,但不知道反向操作怎么实现。尝试过以下循环代码,但无法整合出结果,希望得到帮助:

for row in df.rows:
        N = (counts[row])
        for i in range(N):
                print(diameter[row])
解决方案

方法一:用pandas内置的repeat方法(推荐)

pandas的Series.repeat()方法可以直接实现这个需求,高效且简洁:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'diameter': [1.1, 2.3, 3.0, 5.0, 10.0],
    'counts': [3, 1, 1, 2, 1]
})

# 生成重复后的序列
result_series = df['diameter'].repeat(df['counts'])
# 转为列表格式
result_list = result_series.tolist()
# 转为DataFrame格式
result_df = result_series.reset_index(drop=True).to_frame(name='diameter')

print(result_list)
# 输出:[1.1, 1.1, 1.1, 2.3, 3.0, 5.0, 5.0, 10.0]

方法二:修正你的循环代码

你的思路没问题,只是语法存在小问题(pandas的DataFrame没有rows属性,需用iterrows()遍历),调整后可以实现需求:

result = []
for idx, row in df.iterrows():
    dia = row['diameter']
    cnt = row['counts']
    result.extend([dia] * cnt)

print(result)
# 输出:[1.1, 1.1, 1.1, 2.3, 3.0, 5.0, 5.0, 10.0]

内容的提问来源于stack exchange,提问作者g.is.stuck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:10:10