簡體   English   中英

Python:將兩列組合在一起,找到第三列的總和

[英]Python: Group two columns together and find sum of third column

python真的很新,需要我完成一個問題需要一些幫助。

我需要根據用戶對月份(MM)和年份(YYYY)的輸入來找到每個時間段(月/年)的平均收入。

我的輸入如下:

year_value = int(input("Year (YYYY): "))
month_value = int(input("Month (MM): "))

我的數據框如下所示:

Race_Course   Horse Name      Year   Month   Day   Amount_won_lost   Won/Lost
Aintree       Red Rum         2017   5       12    11.58             won
Punchestown   Camelot         2016   12      22    122.52            won
Sandown       Beef of Salmon  2016   11      17    20.0              lost
Ayr           Corbiere        2016   11      3     25.0              lost
Fairyhouse    Red Rum         2016   12      2     65.75             won
Ayr           Camelot         2017   3       11    12.05             won
Aintree       Hurricane Fly   2017   5       12    11.58             won
Punchestown   Beef or Salmon  2016   12      22    112.52            won
Sandown       Aldaniti        2016   11      17    10.0              lost
etc.

我有兩個問題:

  1. 如何根據輸入將數據分組在一起,並對匹配的Amount_won_lost值求和,以及
  2. 我如何確保在對值進行求和時,當Won / Lost =丟失時,Amount_won_lost中的值為負;當Won / Lost =贏得時,值保持為正

任何幫助將不勝感激! 我已經堅持了幾個小時,似乎無法弄清楚。

輸出應該看起來像這樣,但是任何可以打印結果的東西都是完美的,我不在乎它的外觀:

Year    Month    Amount_won_lost
2016    11       €-55.00

請嘗試這個

by_year = race_data[race_data['Year']==year_value ]
by_month = by_year[by_year['Month']==year_value ]
print(by_month['Amount_won_lost'].sum())

我希望它會有所幫助

ps:數據是一個熊貓DataFrame

您可以先使用pd.DataFrame.apply()更改Amount_won_lost屬性的符號。

因此對於以下行:

df["Amount_won_lost"] = df.apply(lambda x: -x["Amount_won_lost"] \
    if x["Won/Lost"] == "lost" else x["Amount_won_lost"], axis = 1)

它將根據正負值將您的Amount_won_lost列替換為正值或負值。

通過利用其他注釋中提到的sum()函數,您可以獲取給定年份和月份的Amount_won_lost的總和。

以下將選擇您輸入的值中的所有值:

df[(df["Year"] == year_value) & (df["Month"] == month_value)]

輸出將是這樣的:

  Race_Course       HorseName  Year  Month  Day  Amount_won_lost Won/Lost
2     Sandown  Beef of Salmon  2016     11   17            -20.0     lost
3         Ayr        Corbiere  2016     11    3            -25.0     lost
8     Sandown        Aldaniti  2016     11   17            -10.0     lost

print(df[(df["Year"] == year_value) & (df["Month"] == month_value)]["Amount_won_lost"].sum())

將打印-55.0

如果您希望在不使用用戶輸入的情況下查看一年中每個給定月份的總和,那么groupby功能是您最好的選擇!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM