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

如何将pd.value_counts()结果与自定义变量追加到DataFrame行中?

嘿,这个需求很常见,我给你两种靠谱的实现方式,都能精准达到你想要的效果:

方法1:逐次处理并追加到结果DataFrame

适合循环次数不多的场景,每次循环单独处理当前数据,再追加到最终的DataFrame里,还能自动补全缺失的动物类别并填充0。

先初始化一个空的结果DataFrame:

import pandas as pd

# 初始化结果表,指定列顺序和初始列
result_df = pd.DataFrame(columns=['store', 'cat', 'bird', 'dog'])

然后在每次循环里这么处理:

# 第一次循环的示例数据
name = 'store1'
exampledf = pd.DataFrame({'animal': ['bird', 'bird', 'dog', 'cat', 'cat', 'cat']})

# 统计动物数量,转成带列名的DataFrame
counts = exampledf['animal'].value_counts().reset_index()
counts.columns = ['animal', 'count']

# 转成宽格式,补全所有动物类别,缺失的填0
current_row = counts.pivot(index=pd.Index([name]), columns='animal', values='count')
current_row = current_row.reindex(columns=['cat', 'bird', 'dog'], fill_value=0)
# 添加store列并调整顺序
current_row['store'] = name
current_row = current_row[['store', 'cat', 'bird', 'dog']]

# 追加到结果表
result_df = pd.concat([result_df, current_row], ignore_index=True)

第二次循环重复同样的逻辑就行:

# 第二次循环的示例数据
name = 'store2'
exampledf = pd.DataFrame({'animal': ['cat', 'cat', 'bird', 'cat', 'cat', 'bird']})

counts = exampledf['animal'].value_counts().reset_index()
counts.columns = ['animal', 'count']

current_row = counts.pivot(index=pd.Index([name]), columns='animal', values='count')
current_row = current_row.reindex(columns=['cat', 'bird', 'dog'], fill_value=0)
current_row['store'] = name
current_row = current_row[['store', 'cat', 'bird', 'dog']]

result_df = pd.concat([result_df, current_row], ignore_index=True)

最终你会得到想要的结果:

store  cat  bird  dog
0  store1    3     2    1
1  store2    4     2    0
方法2:先收集所有数据,批量处理

如果你的循环次数很多,这种方法效率更高——先把所有数据收集起来,最后一次性统计转换,避免多次拼接DataFrame的开销。

代码示例:

import pandas as pd

# 初始化列表用来存所有带store标记的动物数据
data_records = []

# 第一次循环
name = 'store1'
exampledf = pd.DataFrame({'animal': ['bird', 'bird', 'dog', 'cat', 'cat', 'cat']})
# 把当前store的每条动物记录都带上store名称,加入列表
data_records.extend([{'store': name, 'animal': animal} for animal in exampledf['animal']])

# 第二次循环
name = 'store2'
exampledf = pd.DataFrame({'animal': ['cat', 'cat', 'bird', 'cat', 'cat', 'bird']})
data_records.extend([{'store': name, 'animal': animal} for animal in exampledf['animal']])

# 把所有数据转成DataFrame,然后用交叉表统计数量,自动补0
full_df = pd.DataFrame(data_records)
result_df = pd.crosstab(full_df['store'], full_df['animal']).reset_index()
# 调整列顺序匹配你的需求
result_df = result_df[['store', 'cat', 'bird', 'dog']]

运行后得到的结果和方法1完全一致,而且性能更优。

额外提示

如果你的动物类别不是固定的(比如后续可能出现新的动物),可以动态获取所有类别:比如在收集完所有数据后,用all_animals = full_df['animal'].unique()来替换固定的['cat', 'bird', 'dog'],这样就能自动适配新的类别了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:34:30