如何为DataFrame按A列日期分组添加B列首个值的C列?
解决DataFrame按日期分组添加对应组首值列的问题
嘿,我来帮你搞定这个需求!要给DataFrame新增一列C,让它对应A列日期分组后每组B列的第一个值,用pandas可以轻松实现,我给你具体的方案和示例:
先看示例数据
首先构造一个模拟的DataFrame,方便你理解:
import pandas as pd df = pd.DataFrame({ 'A': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-02'], 'B': [10, 20, 30, 40, 50] })
方法1:用groupby + transform(最直接)
这是最推荐的方式,transform会把分组计算的结果广播回原DataFrame的每一行,完美匹配原数据长度:
df['C'] = df.groupby('A')['B'].transform('first')
方法2:用字典映射(适合复用场景)
如果之后还需要用到分组首值的映射关系,可以先把它转成字典,再用map匹配:
# 先获取每个日期对应的B列首值字典 first_value_dict = df.groupby('A')['B'].first().to_dict() # 映射到原DataFrame的A列,生成C列 df['C'] = df['A'].map(first_value_dict)
最终效果
两种方法运行后,你的DataFrame会变成这样:
| A | B | C |
|---|---|---|
| 2023-01-01 | 10 | 10 |
| 2023-01-01 | 20 | 10 |
| 2023-01-02 | 30 | 30 |
| 2023-01-02 | 40 | 30 |
| 2023-01-02 | 50 | 30 |
可能的踩坑点
如果你之前尝试时没成功,大概率是直接用了df.groupby('A')['B'].first()赋值——这个操作只会返回每个分组的一个值,长度和原DataFrame不匹配,所以会报错或者出现NaN。而上面的两种方法都是把结果对应到每一行,就不会有这个问题啦!
内容的提问来源于stack exchange,提问作者Tie_24
相关产品推荐
相关产品推荐

