【问题标题】:Multiply each value in two data frames and add each answer to a column将两个数据框中的每个值相乘并将每个答案添加到一列
【发布时间】:2016-02-14 05:46:27
【问题描述】:

我正在尝试将两个数据帧(df2 和 df3)中的每个值相乘,并将每个答案添加到其中一个数据帧中的一列。 df2 由数据组成,其中列是类型,行是平均每天的成本。 df3 包含每辆汽车的购买数量。

我想将每一天的每一列和每一行相乘,并将其添加到已在 df3 中创建的名为 Money 的列中。

我已经设置了一个 for 循环,并且 df1 是我可以判断是否有人购买或出售汽车的地方,并希望以某种方式在其中合并一条线以循环遍历 df2 的每一行并将其乘以 df3 并添加货币列中每天的金额:

for i, rows in df1.iterrows():
    if rows.Buy == 'purchase':
        df3.ix[rows.Day,rows.Type] = row.AmountOfCars
        df3.ix[row.day, 'Money '] -= df3.ix[row.Day,rows.type] * df2???

df1(amount)         Audi    BMW     Buy        
2010-03-16          2000    4000    purchase
2010-04-19          2500    4500    sold

df2(prices)      Audi      BMW   
    2010-03-16  450000    350000    
    2010-04-19  6500000   350300  

df3(totals)      Audi      BMW  Money 
    2010-03-16  2000      4000    ?
    2010-04-19  -2500    -4500    ?

【问题讨论】:

  • 您可以添加df1df2df3 的样本以及所需的输出吗?也许 5 - 6 行。
  • @jezrael 好的,我添加了一些,对于我想说的 audi 的钱栏,200 * 450000 添加到我的钱栏,然后 bmw 4000 * 35000 也添加到那天的钱栏
  • 你想求和这个totals 所以输出是2300000000 吗?也许你认为 2000 * 450000 和 4000 * 350000

标签: python numpy pandas dataframe


【解决方案1】:

我认为您可以通过str.contains 比较字符串,使用locsum

print df1['Buy'].str.contains('purchase')
2010-03-16     True
2010-04-19    False
Name: Buy, dtype: bool

print (df3 * df2).sum(axis=1)
2010-03-16     2300000000
2010-04-19   -17826350000
dtype: int64

df3.loc[ df1['Buy'].str.contains('purchase'), 'Money'] = (df3 * df2).sum(axis=1)
print df3
            Audi   BMW       Money
2010-03-16  2000  4000  2300000000
2010-04-19 -2500 -4500         NaN

如果您只想要某些类型的汽车,请使用list cars

cars = ['Audi', 'BMW']
print (df3[cars] * df2[cars]).sum(axis=1)
2010-03-16     2300000000
2010-04-19   -17826350000
dtype: int64

df3.loc[ df1['Buy'].str.contains('purchase'), 'Money'] = (df3[cars] * df2[cars]).sum(axis=1)
print df3
            Audi   BMW       Money
2010-03-16  2000  4000  2300000000
2010-04-19 -2500 -4500         NaN

【讨论】:

  • 我试过这样做,但没有将 ['purchase'] 与块值进行比较
  • 啊,这行得通!谢谢你!你也知道我将如何对“金钱”列求和,因此对于每个日期,它都会一直更新该列的那一天的“金钱”,我尝试使用 df2['Money'].sum() 但它似乎没有上班
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 2013-12-15
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多