【问题标题】:Filter elements from 2 pandas dataframes过滤来自 2 个 pandas 数据帧的元素
【发布时间】:2019-04-19 14:53:44
【问题描述】:

我有两个数据框,它们代表一段时间内的股票价格和一段时间内的股票相关信息(例如公司的基本面数据)。

两个数据框都包含月度数据,但它们的时间跨度不同。一个是5年,另一个是10年。此外,两者的股票数量不同,只有 80% 的重叠。

以下是数据框的示例:

days1 = pd.date_range(start='1/1/1980', end='7/1/1980', freq='M')

df1   = pd.DataFrame(np.random.randn(6, 4), columns=list('ABCD'),index=days1)

days2 = pd.date_range(start='1/1/1980', end='5/1/1980', freq='M')

df2   = pd.DataFrame(np.random.randn(4, 6), columns=list('ABCDEF'),index=days2)

我的目标是将两个数据帧都减少到内部关节。也就是说,两者都涵盖相同的时间段并包含相同的股票。我的索引包含日期,列名是股票名称。

我尝试了merge() 等的多种变体,但是那些重新创建了合并的数据框,我想保留这两个数据框。我也尝试过isin(),但我在努力访问每个数据帧的索引。例如:

df3=df1[df1.isin(df2)].dropna()

有人有什么建议吗?

【问题讨论】:

  • 请发布您的代码示例。

标签: python pandas dataframe


【解决方案1】:

对于列交集:

column_intersection = df1.columns & df2.columns

对于行交点:

row_intersection = df1.index & df2.index

然后只是子集每个数据帧:

df1 = df1.loc[row_intersection, column_intersection]
df2 = df2.loc[row_intersection, column_intersection]

【讨论】:

  • 非常感谢。这非常简单和美丽,我花了几个小时试图弄清楚这一点!
猜你喜欢
  • 2017-12-27
  • 2017-05-05
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多