python - 根据另一个 pandas 日期列表拆分 pandas 日期列表

标签 python pandas merge

我正在尝试使用另一个日期列表来拆分一个日期列表。所以:

d = {'date':['1/15/2015','2/15/2015'], 'num':[1,2]}
s = {'split':['2/1/2015']}

df = pd.DataFrame(d)
sf = pd.DataFrame(s)

df['date'] = pd.to_datetime(df['date'])
sf['split'] = pd.to_datetime(sf['split'])

df['date'].split_by(sf['split'])

会产生:

        date    num
0 2015-01-15    1.0
1 2015-02-01    NaN  
2 2015-02-15    2.0

...但当然,事实并非如此。我确信这里缺少一个简单的合并或连接,但我无法弄清楚。谢谢。

此外,如果 'split' 列表有多个日期,其中一些日期超出 'date' 列表的范围,我不希望将它们包括在内。所以基本上,新范围的范围将与旧范围相同。

(旁注:如果有更好的方法将字典转换为 DataFrame 并立即将日期字符串转换为日期时间,那将是锦上添花)

最佳答案

我认为你需要boolean indexing首先按 dfdate 列的 minmax 过滤 sf concatsort_values ,为了对齐需要重命名列:

d = {'date':['1/15/2015','2/15/2015'], 'num':[1,2]}
s = {'split':['2/1/2015', '2/1/2016', '2/1/2014']}

df = pd.DataFrame(d)
sf = pd.DataFrame(s)

df['date'] = pd.to_datetime(df['date'])
sf['split'] = pd.to_datetime(sf['split'])
print (df)
        date  num
0 2015-01-15    1
1 2015-02-15    2

print (sf)
       split
0 2015-02-01
1 2016-02-01
2 2014-02-01
mask = (sf.split <= df.date.max()) & (sf.split >= df.date.min())
print (mask)
0     True
1    False
2    False
Name: split, dtype: bool

sf = sf[mask]
print (sf)
       split
0 2015-02-01

df = pd.concat([df, sf.rename(columns={'split':'date'})]).sort_values('date')
print (df)
        date  num
0 2015-01-15  1.0
0 2015-02-01  NaN
1 2015-02-15  2.0

关于python - 根据另一个 pandas 日期列表拆分 pandas 日期列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41276829/

相关文章:

python - 复制文件,保留权限和所有者

python - `pip install mysql-python` 失败,返回 "ld: library not found for -lssl"

python - 防止 pandas 将字符串中的 'NA' 解释为 NaN

python - 给定一个 pandas 数据框,如何检查和计算行字符串是否位于一行嵌套列表内?

php - 用 PHP 合并两个图像

r - 如何将值从一个数据帧传输到另一个数据帧?

java - 使用 Session.merge() 函数在 hibernate 中合并两个对象时出现问题

python - flask Restful : how to document response body with fields. 字典()?

python - Pandas groupby 和 value_counts

python - 比较两个长度的字符串的最快方法