【发布时间】:2018-05-22 06:39:39
【问题描述】:
我正在尝试粗略估计员工在给定月份所能完成的工作量。
我有一个大致像这样的 csv(虽然它要大得多):
+--------+-------+---------------+
| Date | Name | Units of Work |
+--------+-------+---------------+
| 1/1/17 | Bob | 450 |
| 2/1/17 | Alice | 300 |
| 2/1/17 | Bob | 450 |
| 2/1/17 | Larry | 50 |
| 3/1/17 | Alice | 400 |
| 3/1/17 | Bob | 11 |
| 3/1/17 | Larry | 100 |
| 4/1/17 | Alice | 1000 |
| 4/1/17 | Bob | 240 |
| 4/1/17 | Larry | 33 |
+--------+-------+---------------+
我想:
- 计算每个“日期”的中值“工作单元”
- 确定是否有任何“姓名”在该“日期”内完成的“工作单位”中位数是否低于 20%
- 如果“姓名”的占比低于中位数的 20%,请删除它
- 将“日期”剩余的“姓名”计数乘以该“日期”的“工作单位”中位数
- 输出一个新的 csv,其中每个“日期”仅出现一次,各占一行,并且该日期的中位数“工作单元”乘以该“日期”的剩余“名称”
我什至无法满足要求 1,更不用说 2 到 5。我为每个日期获取一个文件。我得到一个名为“NewColumn”的新列,其中填充了“中位数”这个词,而不是具有中位数的列,如下所示:
# -*- coding: utf-8 -*-
import pandas as pd
df = pd.read_csv('source.csv')
df = df.sort_values('date_trunc').assign(NewColumn='median')
df.median(axis=None, skipna=None, level=None, numeric_only=None)
for i, g in df.groupby('date_trunc'):
g.to_csv('{}.csv'.format(i), header=True, index_label=False, index=False)
+---------+-------+---------------+-----------+
| Date | Name | Units of work | NewColumn |
+---------+-------+---------------+-----------+
| 12/1/16 | Alice | 6222 | median |
| 12/1/16 | Bob | 14530 | median |
| 12/1/16 | Larry | 16887 | median |
+---------+-------+---------------+-----------+
我知道我在这里可能做错了很多,但我非常感谢一些指导。
我最终想要的是一个带有这个的 csv:
+---------+--------+
| Date | Median |
+---------+--------+
| 12/1/16 | 1110 |
| 1/1/17 | 1400 |
| 2/1/17 | 1200 |
+---------+--------+
【问题讨论】:
-
你失去了我。您在第 1 步中有一个“给定”日期,然后在第 5 步中需要一个“不同”日期的 csv。什么。
-
我正在寻找 2017 年 1 月所有计数的中位数、2017 年 2 月所有计数的中位数、2017 年 3 月所有计数的中位数等...我试图澄清 #1 和 #5
标签: python pandas csv date median