【发布时间】:2020-04-14 19:49:32
【问题描述】:
我有 2 个 CSV 文件,如下所示。
- 我想要一个新专栏
Difference,其中...- 如果手机号码出现在
Book_date...App_date的日期范围内:Difference=区别App_date和Occur_date - 或 NaN,如果它不在该日期范围内。
- 如果手机号码出现在
- 我还想根据唯一的类别和 mobile_number 对其进行过滤
csv_1
Mobile_Number Book_Date App_Date
503477334 2018-10-12 2018-10-18
506002884 2018-10-12 2018-10-19
501022162 2018-10-12 2018-10-16
503487338 2018-10-13 2018-10-13
506012887 2018-10-13 2018-10-21
503427339 2018-10-14 2018-10-17
csv_2
Mobile_Number Occur_Date
503477334 2018-10-16
506002884 2018-10-21
501022162 2018-10-15
503487338 2018-10-13
501428449 2018-10-18
506012887 2018-10-14
我想要 csv_1 中的一个新列,其中如果手机号码出现在 csv_2 中 Book_date 和 App_date 的日期范围内,App_date 与 Occur_date 或 NaN 之间的差异(如果它不在该日期范围内)。输出应该是
输出
Mobile_Number Book_Date App_Date Difference
503477334 2018-10-12 2018-10-18 2
506002884 2018-10-12 2018-10-19 -2
501022162 2018-10-12 2018-10-16 1
503487338 2018-10-13 2018-10-13 0
506012887 2018-10-13 2018-10-21 7
503427339 2018-10-14 2018-10-17 NaN
编辑:
如果我想根据上述两个 csv 文件上的唯一类别和 mobile_number 对其进行过滤。如何做到这一点?
csv_1
Category Mobile_Number Book_Date App_Date
A 503477334 2018-10-12 2018-10-18
B 503477334 2018-10-07 2018-10-16
C 501022162 2018-10-12 2018-10-16
A 503487338 2018-10-13 2018-10-13
C 506012887 2018-10-13 2018-10-21
E 503427339 2018-10-14 2018-10-17
csv_2
Category Mobile_Number Occur_Date
A 503477334 2018-10-16
B 503477334 2018-10-13
A 501022162 2018-10-15
A 503487338 2018-10-13
F 501428449 2018-10-18
C 506012887 2018-10-14
我希望根据 Mobile_Number 和类别过滤输出
输出
Category Mobile_Number Book_Date App_Date Difference
A 503477334 2018-10-12 2018-10-18 2
B 503477334 2018-10-07 2018-10-16 3
C 501022162 2018-10-12 2018-10-16 NaN
A 503487338 2018-10-13 2018-10-13 0
C 506012887 2018-10-13 2018-10-21 7
E 503427339 2018-10-14 2018-10-17 NaN
【问题讨论】:
-
pandas 有
Series.between()运算符。查看现有的 1229 个问题 [pandas] between date。此外,当您读取日期时间列时或之后将它们转换为日期时间通常会有所帮助,将它们作为字符串并没有多大用处。 -
dPac 很难理解你的问题,它分散在多个数据块之间,你能重写第一段中的问题吗?想必你先在
Mobile_Number上加入csv_1, _2,然后过滤.between('Book_date'...'App_date')。但是您想按类别过滤该序列中的哪个位置?这很令人困惑,因为您说“根据唯一类别对其进行过滤”,但您当前的输出对于不同的Book_Date,App_Date值有多个类别 ==A'、'C' 的结果。还有,Category是什么,从哪里来的?... -
...您是否只是为中间结果分配了任意
Category值(例如App_Date, Book_Date?? 的不同组合)还是来自其他地方?无论如何,请编辑您的问题以重述,目前尚不清楚。因此很难找到现有的重复/相关问题。 -
我试图编辑它以清楚地说明问题,并在顶部。 a) 无论您的意思是“时间范围”、“日期范围”还是“日期时间范围”,请尽量保持一致。 b) 我们仍然不知道
Category来自哪里,是来自另一个文件,还是只是为您的临时结果分配了一些默认值? c) 当您不断提及“来自 csv_2 的列”...“在 csv_1 中创建一个新列”时,这会分散注意力。。为什么不一开始就将数据加入一个数据框df? (您始终可以使用to_csv(..., columns)写出单独的列集以分隔CSV 文件) -
...但是请告诉我们
Category来自哪里?!
标签: python pandas datetime date-arithmetic