[英]dataframe groupby operations
我需要在具有相同類別的行中進行操作。 假設我有以下 dataframe
| Category | course | 2010 | 2011 | 2012 |
------------------------------------------------------------
0 | A | Math | 981 | 21 | 9817 |
1 | A | English | 14 | 1610 | 11487 |
2 | A | History | 22.74 | 15 | 12256 |
3 | B | Math | NaN | NaN | 9817 |
4 | B | English | NaN | 1610 | 11 |
5 | B | History | 22.74 | NaN | 25 |
我想得到下面的操作。
| Category | course | 2010 | 2011 | 2012 |
------------------------------------------------------------
0 | A | NEW | XXX | XXX | XXX |
1 | B | NEW | XXX | XXX | XXX |
其中 NEW 是以下操作的結果:
(數學 + 英語)* 歷史/100 對於年份列中的每個新單元格 (XXX)
按Category
對 DataFrame 進行分組,並按提供的公式匯總每年的值。 您可以通過預先將course
設置為索引來訪問每列的相應值。
def aggregate_courses(row):
return (row["Math"] + row["English"]) * row["History"] / 100
df.set_index("course").groupby("Category").aggregate(aggregate_courses).reset_index()
Output:
Category 2010 2011 2012
0 A 226.263 244.65 2611018.24
1 B NaN NaN 2457.0
不知何故, course
專欄丟失了。 如果你需要它,你可以把它重新放回去。
result["course"] = "NEW"
m=df['course'].isin(['Math','English'])#Mask
g=df[m].groupby('Category').sum()#dataframe with the summation of math and english
h=df[~m].drop('course',1).groupby('Category').apply(lambda x: x/100).fillna(0)#dataframe with history
df3=pd.DataFrame(g.values*h.values, columns=g.columns, index=g.index)#element to element multiplication of dfs
2010 2011 2012
Category
A 226.263 244.65 2611018.24
B 0.000 0.00 2457.00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.