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

基于整数列拆分Pandas DataFrame:拆分下蛋鸡行并聚合未下蛋鸡行

解决方案:DataFrame按鸡的下蛋状态拆分与聚合

没问题,我来帮你搞定这个DataFrame的拆分需求!首先咱们先明确下数据结构,假设你的原始DataFrame df1 是这样的(每行代表某个农场里某类鸡的数量,egg 标记是否下蛋):

import pandas as pd

df1 = pd.DataFrame({
    'farm': ['A', 'A'],
    'chicken': [2, 3],
    'egg': [True, False]
})

接下来分三步实现需求:

  • 拆分下蛋的鸡:对于 egg=True 的行,我们把数量拆成对应个数的单独行,每行代表一只鸡(重量设为1)。这里用 apply 把数量转换成包含N个1的列表,再用 explode 展开成多行。
  • 保留未下蛋的鸡:egg=False 的行直接保留,不需要拆分,聚合为一行显示总重量。
  • 合并结果:把两部分数据拼接起来就是最终的 df2。

具体代码实现

# 处理下蛋的鸡,拆分成单独行
df_egg_true = df1[df1['egg'] == True].assign(
    chicken=lambda x: x['chicken'].apply(lambda n: [1]*n)
).explode('chicken', ignore_index=True)

# 处理未下蛋的鸡,直接保留原行
df_egg_false = df1[df1['egg'] == False].copy()

# 合并两个部分得到最终结果
df2 = pd.concat([df_egg_true, df_egg_false], ignore_index=True)

运行后 df2 的结果如下,完全符合你的示例需求:

farmchickenegg
A1True
A1True
A3False

适配原始数据为单一行的情况

如果你的原始DataFrame是每个农场一行(包含总鸡数和下蛋鸡数),比如:

df1 = pd.DataFrame({
    'farm': ['A'],
    'total_chicken': [5],
    'egg_chicken': [2]
})

可以先构造出下蛋和未下蛋的分组数据,再按上述逻辑处理:

# 先拆分出下蛋和未下蛋的分组
temp_df = pd.DataFrame({
    'farm': df1['farm'].repeat(2),
    'chicken': [df1['egg_chicken'].iloc[0], df1['total_chicken'].iloc[0] - df1['egg_chicken'].iloc[0]],
    'egg': [True, False]
})

# 后续处理和之前一致
df_egg_true = temp_df[temp_df['egg'] == True].assign(
    chicken=lambda x: x['chicken'].apply(lambda n: [1]*n)
).explode('chicken', ignore_index=True)

df_egg_false = temp_df[temp_df['egg'] == False].copy()

df2 = pd.concat([df_egg_true, df_egg_false], ignore_index=True)

这样就能得到你想要的拆分结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:27:58