如何实现value_counts逆操作:从计数列生成重复值序列?
问题描述
我有一个包含两列的DataFrame,结构如下:
| diameter | counts |
|---|---|
| 1.1 | 3 |
| 2.3 | 1 |
| 3.0 | 1 |
| 5.0 | 2 |
| 10.0 | 1 |
需要将其重新格式化为包含每个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
相关产品推荐
相关产品推荐

