【问题标题】:How to multiple values between two dataframes based on row index and column name?如何根据行索引和列名在两个数据框之间设置多个值?
【发布时间】:2019-03-09 17:54:06
【问题描述】:

我有两个数据框:

DF1

            GOOG AAPL XOM  IBM  Cash
Date                               
2009-01-14  NaN  150  NaN  NaN  NaN
2009-01-21  NaN  -150 NaN  400  NaN

DF2

           GOOG AAPL  XOM  IBM Cash
Date                               
2009-01-14  NaN  100  NaN  NaN  NaN
2009-01-21  NaN  30   NaN  15   NaN

如何将它们相乘,以便创建一个如下所示的新 DF: 我基本上是在尝试查看DF1,看看索引和列是否存在于DF2中,如果存在,则将它们相乘。

请务必注意,DF1 和 DF2 的索引可能并不完全相同。所以答案必须考虑到这一点。

           GOOG AAPL   XOM  IBM Cash
Date                               
2009-01-14  NaN  15000 NaN  NaN  NaN
2009-01-21  NaN  -4500 NaN  6000 NaN

【问题讨论】:

  • 是否要乘以相应的行?还是日期相同的行?
  • 仅日期索引相同的行。两个数据文件的日期可能不同

标签: python pandas


【解决方案1】:

使用concatgroupby.prod

df = pd.concat([df1,df2])
df.groupby(df.index).prod(min_count=1)
            GOOG   AAPL  XOM     IBM  Cash
Date                                      
2009-01-14   NaN  15000  NaN     NaN   NaN
2009-01-21   NaN  -4500  NaN  6000.0   NaN

【讨论】:

  • 如果索引(日期)不同,concat 是否有效? df2 中的日期不会出现在 df1 中
  • @Shahab 是的,他们会的。不同的日期会在groupby.prod的结果中形成不同的分组。
  • 刚刚试了一下。这似乎不起作用。而是在另一个 df 之上添加一个 df
  • @Shahab 你能提供更多细节吗?
  • 这是我打印代码时的标题栏:AAPL GOOG IBM Order Shares Symbol XOM
【解决方案2】:

使用DataFrame.mul 应该处理索引:

df1.mul(df2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 2021-09-19
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    相关资源
    最近更新 更多