2016-02-14 31 views
1

我试图将两个数据帧(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 ? 
+0

您可以添加'df1','df2'和'df3'的样本以及所需的输出吗?也许5-6排。 – jezrael

+0

@jezrael好吧我添加了一些,并为金钱专栏我想说奥迪,200 * 450000加入我的钱列然后为宝马4000 * 35000添加到钱那一天 – rreg101

+0

你想要总和这个总数'所以输出是'2300000000'?也许你认为2000 * 450000和4000 * 350000 – jezrael

回答

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 

如果你想只有某些类型的汽车使用listcars

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 
+0

我试图这样做,并没有比较['购买']与块值 – rreg101

+0

我编辑答案。请检查一下。 – jezrael

+0

啊,这工作!谢谢!你也知道我如何总结'金钱'列,所以每个日期它更新'金钱'的那一天一路下来,我尝试使用df2 ['金钱'] sum(),但它似乎并没有上班 – rreg101

相关问题