- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试编写一个函数,可以找到数据框中丢失的日期。
这是我的场景:(数据按客户排序,然后按起始日期排序。 日期格式为:M/D/Y)
From Date To Date
Customer
A 1/10/2017 2/9/2017
A NaN NaN
A 3/10/2017 4/9/2017
A NaN NaN
A 4/9/2017 5/9/2017
B 2/10/2017 3/9/2017
B NaN NaN
B 3/9/2017 4/9/2017
该函数应读取“起始日期”和“截止日期”,并查看日期(对于每个客户)是否连续。然后,添加一列(结果)并显示结果。
该函数必须对每个客户进行迭代。
(已添加评论)
请看一下我的预期输出。我也添加了索引和一些解释:Index[1] 显示缺失是因为连续性被破坏,您可以通过比较 To date[0] 与 From date[2] 来得出此结论,这两个值不相同。另一方面:到日期[2]=从日期[4],这就是为什么“结果”显示不缺失[3]。
Customer From date To date Results
0 A 1/10/2017 2/9/2017 NaN
1 A NaN NaN Missing
2 A 3/10/2017 4/9/2017 NaN
3 A NaN NaN Not Missing
4 A 4/9/2017 5/9/2017 NaN
5 B 2/10/2017 3/9/2017 NaN
6 B NaN NaN Not Missing
7 B 3/9/2017 4/9/2017 NaN
任何帮助将不胜感激。
最佳答案
使用pd.DataFrame.groupby
与 pd.to_datetime
:
df['From Date'] = pd.to_datetime(df['From Date'], format="%m/%d/%Y")
df['To Date'] = pd.to_datetime(df['To Date'], format="%m/%d/%Y")
dfs = []
for k, d in df.groupby('Customer'):
dt = d.dropna()['To Date'].shift(1)[1:]
res = []
for i in range(dt.shape[0]):
if (d['From Date'][dt.index] == dt).iloc[i]:
res.append('Not Missing')
else:
res.append('Missing')
for i in range(dt.shape[0]):
dt.iloc[i] = res[i]
dt.index -= 1
dfs.append(pd.concat([d, dt], 1))
result = pd.concat(dfs)
print(result)
Customer From Date To Date To Date
0 A 2017-01-10 2017-02-09 NaN
1 A NaT NaT Missing
2 A 2017-03-10 2017-04-09 NaN
3 A NaT NaT Not Missing
4 A 2017-04-09 2017-05-09 NaN
5 B 2017-02-10 2017-03-09 NaN
6 B NaT NaT Not Missing
7 B 2017-03-09 2017-04-09 NaN
最后:
df.columns = ['From Date', 'To Date', 'Results']
print(df)
Customer From Date To Date Results
0 A 2017-01-10 2017-02-09 NaN
1 A NaT NaT Missing
2 A 2017-03-10 2017-04-09 NaN
3 A NaT NaT Not Missing
4 A 2017-04-09 2017-05-09 NaN
5 B 2017-02-10 2017-03-09 NaN
6 B NaT NaT Not Missing
7 B 2017-03-09 2017-04-09 NaN
说明:
pd.to_datetime
:这是将看起来像日期的数据转换为实际的日期时间数据。这样,pandas
可以做一些计算(例如两天之间的diff
)。由于它是串行操作,因此必须在每个所需列上完成,而不是在整个数据帧上完成。df.groupby
:groupby
返回一个类似字典的对象,以给定条件作为键。由于整个计算是在每个 Customer
上完成的,使用 `df.groupby('Customer')。dt = d.dropna()['To Date'].shift(1)[1:]
:d
是仅包含单个 Customer
的数据帧的子集的数据。 shift(1)
提供向下移动 1 个单元格的数据帧。这是为了比较To Date
和From Date
简单。d['From Date'][dt.index] == dt
:提供To Date
之间比较的 bool 结果和From Date
.dt.iloc[i] = res[i]
:一旦您拥有 list
的 Missing 和 Not Missing 的,您将其分配回 dt
制作Results
列。dfs.append(pd.concat([d, dt] 1))
: 连接新创建的Results
原创栏目d
,和append
到 list
result = pd.concat(dfs)
:dfs
现在包含每个 Customer
的子集数据帧。将它们连接成一个大数据帧。result.columns = ['To Date', 'From Date', 'Results']
:重新分配列名称。 关于python - 查找缺失的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54818974/
我的数据库中有两张表,一张用于 field ,另一张用于预订。我需要的是一个查询来选择所有未预订的 field 。见下文: 餐 table 预订具有以下字段: bk_id venue_id 作为(预订
嗨,我是编码新手,我有一些培训项目,其中包括从 HTML 表单输入 MySQL 数据库。它就像你玩过的游戏的日志。第一个日期输入是您开始游戏的时间,第二个日期输入是您完成游戏的时间。但我需要检查器或类
我是这个 sql 编码的新手,我正在尝试学习新的东西。因此,我创建了一个交货表,其中包含一些属性,如商品代码、交货日期、交货数量。所以如何从同一张表中获取第一个交货日期(最小日期)和交货数量以及最晚交
我从支付网关返回了这个日期 2014-05-15T08:40:52+01:00 我得到 2014-05-15T08:40:52 但我无法识别时区 +01:00 的含义 我的位置时区是 UTC−06:0
我快要疯了,请帮忙。 我有一列包含日期时间值。 我需要找到每天的最小值和最大值。 数据看起来像这样 2012-11-23 05:49:26.000 2012-11-23 07:55:43.000
我从 json 数据中获取日期为 2015 年 4 月 15 日晚上 10:15我只想在 html 页面中显示 json 响应数据的时间,例如 10:15 PM这里我放了我的js函数和html代码 J
是否有 javascript 库或其他机制允许我将 .NET 日期/时间格式字符串(即 yyyy-MM-dd HH:mm:ss)传递给 javascript函数并让它相应地解析提供的日期时间值?我一直
我正在使用以下代码以正确的格式获取当前的 UTC 时间,但客户返回并要求时间戳现在使用 EST 而不是 UTC。我搜索了 Google 和 stackoverflow,但找不到适用于我现有代码的答案。
我有以下日期的平均温度数据。我想找到连续至少 5 天低于或高于 0 摄氏度的开始日期。 date_short mean.temp 1 2018-05-18 17.54 2 2018-05-19
它可以在其他网络浏览器中使用,但 IE11 返回无效日期。 为了调试我使用了下面的代码。 console.log('before - ' + date.value); date.value = new
我在 Excel 中有一个数据的 Web 提取,其中日期列带有/Date(1388624400000)/。我需要在 Excel 中将其转换为日期。 最佳答案 能够从 here 中推断出它. 假设字符串
嗨,我的 Schmema 有一个带有 ISO 日期的字段: ISODate("2015-04-30T14:47:46.501Z") Paypal 在成功付款后以该形式返回日期对象: Time/Date
我的 table : CREATE TABLE `tbdata` ( `ID` INT(10) NOT NULL AUTO_INCREMENT, `PatientID` INT(10) NOT
我正在 Ubuntu 服务器 12.04 中编写一个 shell 脚本,它应该比较日志文件中的一些数据。在日志文件中,日期以以下格式给出: [Mon Apr 08 15:02:54 2013] 如您所
我想使用 GROUP BY WITH ROLLUP 创建一个表并获取总行数而不是 null。 $sql ="SELECT IF(YEAR(transaktioner.datum
我正在创建博客文章,在成功迁移我的博客文件后,当我转到我网站的博客页面时返回一个错误(无法解析其余部分:':“Ymd”'来自'post.date|date: "Ymd"') 我似乎无法确定这是语法错误
我正在尝试获取要插入到 CAML 查询中的月份范围,即:2010-09-01 和 2010-09-30。 我使用以下代码生成这两个值: var month = "10/2010"; var month
如何将代码document.write("直到指定日期")更改为writeMessage(date)中的日期?此外,writeMessage(date) 中的日期未正确显示(仅显示年份)。感谢您帮助解
我在 Windows (XP) 和 Linux 上都尝试过 utime()。在 Windows 上我得到一个 EACCES 错误,在 Linux 上我没有得到任何错误(但时间没有改变)。我的 utim
我正在尝试计算发生在同一日期的值的总和(在 XYZmin 中)。 我的数据看起来像这样, bar <- structure(list(date = structure(c(15622, 15622,
我是一名优秀的程序员,十分优秀!