Python 在熊猫中使用groupby、transpose、append或pivot的哪些功能?如何使用它们?
我有一个熊猫数据框,如下所示:Python 在熊猫中使用groupby、transpose、append或pivot的哪些功能?如何使用它们?,python,pandas,pivot,pandas-groupby,Python,Pandas,Pivot,Pandas Groupby,我有一个熊猫数据框,如下所示: df_starting_point = pd.DataFrame( [{'robot_id': 130, 'work_id': 1, 'grade': '1', 'time' : 1}, {'robot_id': 141, 'work_id': 2, 'grade': '3', 'time' : 1}, {'robot_id':
df_starting_point = pd.DataFrame(
[{'robot_id': 130, 'work_id': 1, 'grade': '1', 'time' : 1},
{'robot_id': 141, 'work_id': 2, 'grade': '3', 'time' : 1},
{'robot_id': 141, 'work_id': 60, 'grade': '4', 'time' : 1},
{'robot_id': 17013, 'work_id': 1, 'grade': '1', 'time' : 1},
{'robot_id': 17013, 'work_id': 1478, 'grade': '5', 'time' : 1},
{'robot_id': 17013, 'work_id': 1478, 'grade': '4', 'time' : 2},
{'robot_id': 17013, 'work_id': 230, 'grade': '2', 'time' : 1},
{'robot_id': 130, 'work_id': 123, 'grade': '1', 'time' : 1},
{'robot_id': 17013, 'work_id': 2, 'grade': '2', 'time' : 1}
])
df_end_point = pd.DataFrame(
[{'robot_id': 130, '1': 1, '2': np.nan, '60': np.nan, '123': 1, '230': np.nan, '1478': np.nan},
{'robot_id': 141, '1': np.nan, '2': 3, '60': 4, '123': np.nan, '230': np.nan, '1478': np.nan},
{'robot_id': 17013, '1': 1, '2': 2 , '60': np.nan, '123': np.nan, '230': 2, '1478': 4},
])
我想用它创建一个数据帧,如下所示:
df_starting_point = pd.DataFrame(
[{'robot_id': 130, 'work_id': 1, 'grade': '1', 'time' : 1},
{'robot_id': 141, 'work_id': 2, 'grade': '3', 'time' : 1},
{'robot_id': 141, 'work_id': 60, 'grade': '4', 'time' : 1},
{'robot_id': 17013, 'work_id': 1, 'grade': '1', 'time' : 1},
{'robot_id': 17013, 'work_id': 1478, 'grade': '5', 'time' : 1},
{'robot_id': 17013, 'work_id': 1478, 'grade': '4', 'time' : 2},
{'robot_id': 17013, 'work_id': 230, 'grade': '2', 'time' : 1},
{'robot_id': 130, 'work_id': 123, 'grade': '1', 'time' : 1},
{'robot_id': 17013, 'work_id': 2, 'grade': '2', 'time' : 1}
])
df_end_point = pd.DataFrame(
[{'robot_id': 130, '1': 1, '2': np.nan, '60': np.nan, '123': 1, '230': np.nan, '1478': np.nan},
{'robot_id': 141, '1': np.nan, '2': 3, '60': 4, '123': np.nan, '230': np.nan, '1478': np.nan},
{'robot_id': 17013, '1': 1, '2': 2 , '60': np.nan, '123': np.nan, '230': 2, '1478': 4},
])
在df\u起点中
- 每个机器人id都有多个不同工作id的条目
- 每项完成的工作都将被评分
- 机器人id可以完成工作id多次。因此,一个机器人id可以对同一个工作id拥有多个等级
- 每个唯一的机器人id对应一行
- 每个发生的工作id有一列,其中工作id是标签
- 输入相应的等级。如果存在多个等级,则应将时间中数量最多的等级居中
多谢各位。非常感谢您的帮助。我们的想法是,在分组后,只过滤时间最长的行,然后转换为整数,这样在另一次分组后,可以通过求和填充空单元格
(
df_starting_point.set_index(["robot_id", "work_id"], append=True)
.assign(temp=lambda x: x.groupby(["robot_id", "work_id"]).time.transform("max"))
.query("time==temp")
.drop(["time", "temp"], axis=1)
.astype(int)
.unstack()
.groupby("robot_id")
.sum(min_count = 1)
)
grade
work_id 1 2 60 123 230 1478
robot_id
130 1.0 NaN NaN 1.0 NaN NaN
141 NaN 3.0 4.0 NaN NaN NaN
17013 1.0 2.0 NaN NaN 2.0 4.0
其思想是在分组后,仅对时间最长的行进行过滤,然后转换为整数,以便在另一次按和分组后填充空单元格
(
df_starting_point.set_index(["robot_id", "work_id"], append=True)
.assign(temp=lambda x: x.groupby(["robot_id", "work_id"]).time.transform("max"))
.query("time==temp")
.drop(["time", "temp"], axis=1)
.astype(int)
.unstack()
.groupby("robot_id")
.sum(min_count = 1)
)
grade
work_id 1 2 60 123 230 1478
robot_id
130 1.0 NaN NaN 1.0 NaN NaN
141 NaN 3.0 4.0 NaN NaN NaN
17013 1.0 2.0 NaN NaN 2.0 4.0
首先,谢谢,它似乎起作用了。有没有办法用pivot做到这一点?在我看来,这个函数是为像我这样的用例设计的。
pivot
在单个索引上工作;此外,使用pivot,您将无法筛选时间为
max``的行。首先,谢谢,它似乎可以工作。有没有办法用pivot做到这一点?在我看来,这个函数是为像我这样的用例设计的。pivot
在单个索引上工作;此外,使用pivot,您将无法筛选时间为
最大值的行``