Python 按日期减少数据库的大小

Python 按日期减少数据库的大小,python,pandas,Python,Pandas,我有一个包含多个列的大型数据集,这些列具有不同的日期和数据。我想为数百个不同的列创建一个日期范围内的新数据库 toy = pd.DataFrame() toy['Date1'] = ['4/12/2020','4/11/2020','4/10/2020'] toy['Data1'] = [1, 2, 3] toy['Date2'] = ['4/13/2020', '4/11/2020', '4/09/2020'] toy['Data2'] = [4, 5, 6] 新数据库,其中“日期”列指定

我有一个包含多个列的大型数据集,这些列具有不同的日期和数据。我想为数百个不同的列创建一个日期范围内的新数据库

toy = pd.DataFrame()
toy['Date1'] = ['4/12/2020','4/11/2020','4/10/2020']
toy['Data1'] = [1, 2, 3]

toy['Date2'] = ['4/13/2020', '4/11/2020', '4/09/2020']
toy['Data2'] = [4, 5, 6]
新数据库,其中“日期”列指定或取自其中一个日期:

new = pd.DataFrame()
new['Date'] = ['4/11/2020', '04/09/2020', '3/31/2020']
new['Data1'] = [2, NaN, NaN]
new['Data2'] = [5, 6, NaN]

认识到这是非常简单的,但需要一些可以用于数百列的东西,而不需要使用循环

我认为没有一种非循环的方法可以做到这一点,但是,您可以尝试通过在索引中包含所有日期来统一初始数据帧的索引,这样至少可以减少迭代的数量。这可以通过一个过程来完成,首先,让我们添加一个附加列:

toy['Date10'] = ['4/12/2020', '4/11/2020', '4/20/2020']
toy['Data10'] = [2, 8, 7]

toy.columns # ['Date1', 'Data1', 'Date2', 'Data2', 'Date10', 'Data10']
创建一个数据帧列表,其中每个元素都包含一对
日期数据
,并将
日期
设置为索引,然后
concat

import re

dfs_toy = [x.set_index(x.columns[0]).dropna()
   for i, x in toy.groupby(lambda x: re.split('([0-9]+)', x)[1], axis=1)]

toy_2 = pd.concat(dfs_toy, axis=1)

#           Data1  Data10  Data2
# 4/12/2020 1.0    2.0     NaN
# 4/11/2020 2.0    8.0     5.0
# 4/10/2020 3.0    NaN     NaN
最后,如果使用不同的索引创建一个新的数据框,只需分配所有列,如果存在匹配项,则将分配其他列
nan
值:

new_df = pd.DataFrame(index=['4/12/2020', '4/10/2020', '4/25/2020'])
new_df[toy_2.columns] = toy_2
new_df.head()

#            Data1 Data10 Data2
# 4/12/2020  1.0   2.0    NaN
# 4/10/2020  3.0   NaN    NaN
# 4/25/2020  NaN   NaN    NaN

你的意思是在你的第一个玩具数据框中的
toy['Date2']
?你的数据框有多少行?