【发布时间】:2020-05-07 19:36:31
【问题描述】:
我确定这个问题已经得到解答,但不幸的是我不知道如何调用这个操作,所以我的搜索失败了。它几乎就像一个反向数据透视表。
假设我有以下工资单数据:
data = [
{'employee': 1, 'date': '2020-01-04', 'reg': 8, 'ot': 0, 'dt': 0},
{'employee': 1, 'date': '2020-01-05', 'reg': 4, 'ot': 4, 'dt': 0},
{'employee': 1, 'date': '2020-01-06', 'reg': 0, 'ot': 0, 'dt': 4},
{'employee': 2, 'date': '2020-01-04', 'reg': 6, 'ot': 2, 'dt': 0},
{'employee': 2, 'date': '2020-01-05', 'reg': 3, 'ot': 5, 'dt': 0},
{'employee': 2, 'date': '2020-01-06', 'reg': 0, 'ot': 4, 'dt': 0},
]
data_df = pd.DataFrame(data)
我需要做的是将每个员工/日期的每个费率(“reg”、“ot”和“dt”)分解成自己的行,其中有一列是费率标签,一列是小时数,保留其他非基于速率的列。此外,我不希望值为零的任何费率有一行。对于上面的数据,我希望得到:
result = [
{'employee': 1, 'date': '2020-01-04', 'rate': 'reg', 'hours': 8},
{'employee': 1, 'date': '2020-01-05', 'rate': 'reg', 'hours': 4},
{'employee': 1, 'date': '2020-01-05', 'rate': 'ot', 'hours': 4},
{'employee': 1, 'date': '2020-01-06', 'rate': 'dt', 'hours': 4},
{'employee': 2, 'date': '2020-01-04', 'rate': 'reg', 'hours': 6},
{'employee': 2, 'date': '2020-01-04', 'rate': 'ot', 'hours': 2},
{'employee': 2, 'date': '2020-01-05', 'rate': 'reg', 'hours': 3},
{'employee': 2, 'date': '2020-01-05', 'rate': 'ot', 'hours': 5},
{'employee': 2, 'date': '2020-01-06', 'rate': 'ot', 'hours': 4},
]
result_df = pd.DataFrame(result)
任何关于如何实现这一点的想法将不胜感激!
【问题讨论】:
标签: python pandas dataframe reshape