gpt4 book ai didi

python - Pandas -将列旋转成(条件)聚合字符串

转载 作者:太空狗 更新时间:2023-10-30 01:52:39 24 4
gpt4 key购买 nike

假设我有以下数据集,变成了一个数据框:

data = [
['Job 1', datetime.date(2019, 6, 9), 'Jim', 'Tom'],
['Job 1', datetime.date(2019, 6, 9), 'Bill', 'Tom'],
['Job 1', datetime.date(2019, 6, 9), 'Tom', 'Tom'],
['Job 1', datetime.date(2019, 6, 10), 'Bill', None],
['Job 2', datetime.date(2019,6,10), 'Tom', 'Tom']
]
df = pd.DataFrame(data, columns=['Job', 'Date', 'Employee', 'Manager'])

这会产生一个如下所示的数据框:

     Job        Date Employee Manager
0 Job 1 2019-06-09 Jim Tom
1 Job 1 2019-06-09 Bill Tom
2 Job 1 2019-06-09 Tom Tom
3 Job 1 2019-06-10 Bill None
4 Job 2 2019-06-10 Tom Tom

我试图生成的是每个独特的工作/日期组合的枢轴,一列用于经理,一列用于字符串,其中以逗号分隔,非经理员工。假设有几件事:

  1. 所有员工姓名都是唯一的(实际上我将使用唯一的员工 ID 而不是姓名),并且经理也是“员工”,因此永远不会出现员工和经理共享相同姓名/ID 的情况, 但不同的个体。
  2. 一个工作组可以有经理,也可以没有(参见 id 为 3 的行,没有的例子)
  3. 经理也总是会被列为员工(参见 id 为 2 或 4 的行)
  4. 一个工作可以有一个经理,没有额外的员工(见第 id 4 行)

我希望生成的数据框看起来像:

     Job        Date  Manager     Employees
0 Job 1 2019-06-09 Tom Jim, Bill
1 Job 1 2019-06-10 None Bill
2 Job 2 2019-06-10 Tom None

这引出了我的问题:

  1. 有没有办法在 pandas 数据透视表中执行类似“,”.join 的聚合?
  2. 有没有办法使这个聚合有条件(排除经理列中的名称/ID)

我怀疑 1) 是可能的,而 2) 可能更难。如果 2) 是否定的,我可以稍后在我的代码中以其他方式绕过它。

最佳答案

这里棘手的部分是从 Employee 列中删除经理。


u = df.melt(['Job', 'Date'])
f = u[~u.duplicated(['Job', 'Date', 'value'], keep='last')].astype(str)

f.pivot_table(
index=['Job', 'Date'],
columns='variable', values='value',
aggfunc=','.join
).rename_axis(None, axis=1)

                  Employee Manager
Job Date
Job 1 2019-06-09 Jim,Bill Tom
2019-06-10 Bill None
Job 2 2019-06-10 NaN Tom

关于python - Pandas -将列旋转成(条件)聚合字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56739501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com