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

技术问询:x有重复值时给新列y2赋值及农场厩舍数据转宽表

问题1:当x列存在重复值时,将y列的值分配到y2新列

以下是两种常见场景的解决方案:

场景1:将同一x对应的所有y值合并到y2列(字符串拼接形式)

假设原始数据如下:

xy
a1
a2
b3

用pandas实现:

import pandas as pd

df = pd.DataFrame({'x': ['a', 'a', 'b'], 'y': [1, 2, 3]})
# 按x分组,将y值用逗号拼接为字符串
df['y2'] = df.groupby('x')['y'].transform(lambda x: ','.join(map(str, x)))

处理后结果:

xyy2
a11,2
a21,2
b33

场景2:为每个重复的x分配对应唯一y值到y2

如果需要标记同一x下非首次出现的y值到y2列,可通过分组序号实现:

# 按x分组生成递增序号
df['idx'] = df.groupby('x').cumcount()
# 将非首次的y值存入y2,首次则为NA
df['y2'] = df.where(df['idx'] > 0, pd.NA)['y']

问题2:将农场厩舍数据从长表转换为宽表

步骤1:创建示例数据

import pandas as pd

data = {
    'Farm ID': [1, 1, 1, 2, 2, 3],
    'Stable type': ['A10', 'A20', 'A30', 'A10', 'A20', 'A10']
}
df = pd.DataFrame(data)

步骤2:转换为宽表格式

# 按Farm ID分组,为每个厩舍生成从1开始的序号
df['stable_seq'] = df.groupby('Farm ID').cumcount() + 1
# 重塑数据为宽表,缺失值填充为NA
wide_df = df.pivot(index='Farm ID', columns='stable_seq', values='Stable type')
# 重命名列名为Stable1、Stable2...
wide_df.columns = [f'Stable{col}' for col in wide_df.columns]
# 重置索引,让Farm ID作为普通列
wide_df = wide_df.reset_index().fillna(pd.NA)

最终输出结果:

Farm IDStable1Stable2Stable3
1A10A20A30
2A10A20
3A10

也可通过pivot_table简化实现:

wide_df = df.pivot_table(
    index='Farm ID',
    columns=df.groupby('Farm ID').cumcount() + 1,
    values='Stable type',
    aggfunc='first'
).rename(columns=lambda x: f'Stable{x}').reset_index().fillna(pd.NA)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:07:26