2016-02-14 47 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

相關問題