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']
?你的数据框有多少行?