首页 > 解决方案 > 数据框中的哪一行是多余的?

问题描述

我有两个dataframes包含市场每日收盘数据。它们应该包含相同的开始日期和结束日期以及行数,但是当我打印len每个时,一个比另一个大一:

DF1
            close
date              
2008-01-01   45.92
2008-01-02   45.16
2008-01-03   45.33
2008-01-04   42.09
2008-01-07   46.98
...
[2870 rows x 1 columns]

DF2

             close
date              
2008-01-01   60.48
2008-01-02   59.71
2008-01-03   58.43
2008-01-04   56.64
2008-01-07   56.98
...
[2871 rows x 1 columns]

我怎样才能显示哪一行:

这样我就可以删除 [probable] 周末/假日日期行,DF2但不在DF1

我试过这样的事情:

df1 = df1.drop_duplicates(subset='date', keep='first')
df2 = df1.drop_duplicates(subset='date', keep='first')

但不能让它工作[ ValueError: not enough values to unpack (expected 2, got 0)]。

额外的:

如何从数据框中删除周末日期?

标签: python-3.xpandasdataframe

解决方案


可以使用.loc

DF2=DF2.loc[DF1.index]

如果检查 DF1 和 DF2 之间的索引不同

DF2.index.difference(DF1.index)

检查DF2是否有重复索引

DF2[DF2.index.duplicated(keep=False)]

检查周末

df.index.weekday_name.isin(['Sunday','Saturday'])

修复你的代码

df1 = df1.reset_index().drop_duplicates(subset='date', keep='first').reset_index('date')
df2 = df2.reset_index().drop_duplicates(subset='date', keep='first').reset_index('date')

我也为此推荐duplicated

df2 =df2 [df2.index.duplicated()]

有关business

def B_day(date):
    return bool(len(pd.bdate_range(date, date)))

df.index.map(B_day)

推荐阅读