python - 如何根据条件将行添加到具有某些行的默认值的现有数据框中?
问题描述
我有一个数据集,其中包含有关基金每日表现的信息。在我的完整数据集中,有 2015 年 12 月 1 日到 2017 年 6 月 29 日之间的每日指标,但并非所有基金都有这些日子的每一天的信息。
我想要做的是在最小和最大日期(12/1/15 和 6/29/17)之间的每一天添加行,并为调整后的收盘价设置 N/A 值。
#ORIGINAL DATASET (EXAMPLE)
# List of Tuples
records = [ ('Fund 1', 34, '12/1/18') ,
('Fund 1', 53, '12/2/18') ,
('Fund 1', 42, '12/3/18') ,
('Fund 2', 44, '12/3/18') ,
('Fund 1', 32, '12/4/18') ,
('Fund 2', 31, '12/4/18') ,
('Fund 2', 57, '12/5/18') ]
#Create a DataFrame object
dfObj = pd.DataFrame(records, columns = ['Fund' , '$', 'Date'])
dfObj
Fund $ Date
Fund 1 34 12/1/18
Fund 1 53 12/2/18
Fund 1 42 12/3/18
Fund 2 44 12/3/18
Fund 1 32 12/4/18
Fund 2 31 12/4/18
Fund 2 57 12/5/18
#DESIRED DATASET (EXAMPLE)
# List of Tuples
desired_records = [ ('Fund 1', 34, '12/1/18') ,
('Fund 1', 53, '12/2/18') ,
('Fund 1', 42, '12/3/18') ,
('Fund 2', 44, '12/3/18') ,
('Fund 1', 32, '12/4/18') ,
('Fund 2', 31, '12/4/18'),
('Fund 2', 0, '12/1/18') ,
('Fund 2', 0, '12/2/18'),
('Fund 2', 57, '12/5/18'),
('Fund 1', 0, '12/5/18') ]
#Create a DataFrame object
desired_df = pd.DataFrame(desired_records, columns = ['Fund' , '$', 'Date'])
desired_df.sort_values(by=['Date'])
Fund $ Date
Fund 1 34 12/1/18
Fund 2 0 12/1/18
Fund 1 53 12/2/18
Fund 2 0 12/2/18
Fund 1 42 12/3/18
Fund 2 44 12/3/18
Fund 1 32 12/4/18
Fund 2 31 12/4/18
Fund 2 57 12/5/18
Fund 1 0 12/5/18
这是一个简单的修复吗?
解决方案
在你的情况下使用stack
和unstack
df=df.set_index(['Date','Fund']).unstack(fill_value=0).stack().reset_index()
Out[138]:
Date Fund $
0 12/1/18 Fund 1 34
1 12/1/18 Fund 2 0
2 12/2/18 Fund 1 53
3 12/2/18 Fund 2 0
4 12/3/18 Fund 1 42
5 12/3/18 Fund 2 44
6 12/4/18 Fund 1 32
7 12/4/18 Fund 2 31
8 12/5/18 Fund 1 0
9 12/5/18 Fund 2 57