首页 > 解决方案 > 如何根据条件将行添加到具有某些行的默认值的现有数据框中?

问题描述

我有一个数据集,其中包含有关基金每日表现的信息。在我的完整数据集中,有 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

这是一个简单的修复吗?

标签: pythonpandasdataframeconditional-statementsrows

解决方案


在你的情况下使用stackunstack

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

推荐阅读