python - 创建一个以另一个 DataFrame 为条件的 Pandas DataFrame

标签 python python-3.x pandas

我有两个数据框。第一个 df1 包含各种代码的历史时间序列数据,其 DateTime 索引如下所示:

                       ABC              DEF            XYZ
 2011-06-06            10.00            10.00          10.0000   
 2011-06-17            10.00            10.00          10.0000   
 2011-06-21            10.00            10.00          10.0000   
 2011-06-22            10.00            10.00          10.0000   
 2011-06-23            10.00            10.00          10.0000   
 2011-06-24            10.00            10.00          10.0000   
 2011-06-30            10.00            10.00          10.0000   
 2011-07-11            10.00            10.00          10.0000   

第二个 df2 有三列; Start_DateEnd_DateTickerStart_DateEnd_Date 均采用日期时间格式:

    End_Date Start_Date  Ticker
0 2011-06-27 2011-06-22  ABC
1 2011-06-30 2011-06-17  DEF
2 2011-06-25 2011-06-18  XYZ

我想使用以下代码创建第三个 DataFrame,df3

df4 = df.copy()
df4.lock[:] = np.nan

df2['Start_Date']df2['End_Date'] 之间,我想用 1.00< 填充 df3 并将其他行保留为 np.nan

我尝试创建一个函数并迭代df2

def pos():
    position = 1
    for i in df2['Ticker']:
        df3.at[df2['Start_Date'], i] = position
    return pos

def pos():
    position = 1
    for index, row in df2.iterrows:
        df3.at[index, row['Start_Date']] = position
    return pos

生成的 df3 看起来像这样:

                        ABC              DEF              XYZ
2011-06-06              NaN              NaN              NaN   
2011-06-17              NaN              1.0              NaN   
2011-06-21              NaN              1.0              1.0   
2011-06-22              1.0              1.0              1.0   
2011-06-23              1.0              1.0              1.0   
2011-06-24              1.0              1.0              1.0   
2011-06-30              NaN              1.0              NaN   
2011-07-11              NaN              NaN              NaN   
2011-07-13              NaN              NaN              NaN   
2011-07-14              NaN              NaN              NaN   

我在这两方面都没有太多运气。最好的方法是什么?

提前致谢

最佳答案

IIUC:

d2 = df2.set_index('Ticker')
df3 = df1.copy()
for tick, col in df3.iteritems():
    d2 = df2.set_index('Ticker')
    sd = d2.at[tick, 'Start_Date']
    ed = d2.at[tick, 'End_Date']
    df3.loc[sd:ed, tick] = 1

df3

             ABC   DEF   XYZ
2011-06-06  10.0  10.0  10.0
2011-06-17  10.0   1.0  10.0
2011-06-21  10.0   1.0   1.0
2011-06-22   1.0   1.0   1.0
2011-06-23   1.0   1.0   1.0
2011-06-24   1.0   1.0   1.0
2011-06-30  10.0   1.0  10.0
2011-07-11  10.0  10.0  10.0

关于python - 创建一个以另一个 DataFrame 为条件的 Pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48871169/

相关文章:

python - Pandas 数据框列表部分字符串匹配python

python - 使用 Pandas 滚动方法计算加权移动平均值

python - 如何从代码自动在 sphinx 中创建顶级文档?

python - 命名项目版本的正确方法是什么?

python - 使用递归来反转 python 中围绕值的字典

python - 想获取远程PC的mac地址

从 cronjob 运行时,Python 找不到自定义安装的模块

python - 删除管道之前的所有字符,并使用 python 中的正则表达式删除管道

python - 如何附加一个类的实例,然后在 Python 中提取实例的属性?

python - 在 gitlab-ci 中运行 Sonar 扫描仪