按A分组生成新列E:基于D=0的B列均值填充
生成新列E的解决方案(基于Pandas)
嘿,我来帮你搞定这个新列E的生成需求!针对你给出的数据集和规则,用Python的Pandas库来实现是最便捷的方式,下面是具体的步骤和代码实现:
步骤1:准备数据
首先把你提供的数据集转换成Pandas DataFrame(如果还没做的话):
import pandas as pd data = { 'A': ['2002-01-13']*6 + ['2002-02-09']*5, 'B': [200, 180, 250, 300, 220, 125, 410, 0, 550, 500, 150], 'C': ['X', 'X', 'X', 'Y', 'Y', 'Y', 'X', 'X', 'Y', 'Y', 'Y'], 'D': [1, 0, -1, 1, 0, -1, 1, 1, 1, 1, -1] } df = pd.DataFrame(data)
步骤2:定义分组计算逻辑
我们需要一个函数来处理每个分组的E值计算:
- 对于每个
A分组,先筛选出D=0的行,取这些行B列的均值作为该组所有行的E值 - 如果分组内没有
D=0的行,这里提供两种常见的处理方式,你可以根据需求选择:- 选项1:返回该分组
B列的整体均值 - 选项2:返回
NaN(表示缺失值)
- 选项1:返回该分组
def calculate_E(group): # 筛选当前分组中D=0的行 d0_subset = group[group['D'] == 0] if not d0_subset.empty: # 存在D=0的行,返回B的均值 return d0_subset['B'].mean() else: # 无D=0的行,选择下方其中一种处理方式 # 选项1:返回分组B的均值 return group['B'].mean() # 选项2:返回NaN(取消注释即可) # return pd.NA
步骤3:应用函数生成新列E
使用groupby+transform方法,把函数应用到每个A分组,自动为每一行填充对应的E值:
df['E'] = df.groupby('A').transform(calculate_E)
最终结果
运行上述代码后,你的DataFrame会新增E列,结果如下:
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 0 | 2002-01-13 | 200 | X | 1 | 200.0 |
| 1 | 2002-01-13 | 180 | X | 0 | 200.0 |
| 2 | 2002-01-13 | 250 | X | -1 | 200.0 |
| 3 | 2002-01-13 | 300 | Y | 1 | 200.0 |
| 4 | 2002-01-13 | 220 | Y | 0 | 200.0 |
| 5 | 2002-01-13 | 125 | Y | -1 | 200.0 |
| 6 | 2002-02-09 | 410 | X | 1 | 322.0 |
| 7 | 2002-02-09 | 0 | X | 1 | 322.0 |
| 8 | 2002-02-09 | 550 | Y | 1 | 322.0 |
| 9 | 2002-02-09 | 500 | Y | 1 | 322.0 |
| 10 | 2002-02-09 | 150 | Y | -1 | 322.0 |
注:2002-01-13分组中D=0的B值是180和220,均值正好是200;2002-02-09分组没有D=0的行,这里用了选项1的处理方式,返回该组B的均值(410+0+550+500+150)/5=322。
内容的提问来源于stack exchange,提问作者Tie_24
相关产品推荐
相关产品推荐

