qq_花開(kāi)花謝_0
2023-02-22 16:40:02
編輯:在 Excel 中使用高級(jí)搜索(在數(shù)據(jù)選項(xiàng)卡下)我已經(jīng)能夠創(chuàng)建一個(gè)唯一公司名稱(chēng)列表,現(xiàn)在我可以根據(jù)包含公司名稱(chēng)的單元格進(jìn)行 SUMIF!免責(zé)聲明:任何 python 解決方案也將不勝感激,特別是熊貓!我有 60,000 行數(shù)據(jù),其中包含有關(guān)授予公司的贈(zèng)款的信息。我計(jì)劃創(chuàng)建一個(gè) python 字典來(lái)存儲(chǔ)每個(gè)唯一的公司名稱(chēng),以及他們給定的總贈(zèng)款 $ (agreemen_2) 和位置坐標(biāo)。然后,我想在加拿大的實(shí)時(shí) MapBox 地圖上使用 Dash(Plotly)顯示它。首先,我如何計(jì)算和存儲(chǔ)授予每家公司的總價(jià)值?我在其他解決方案中看到過(guò) SUMIF,但不確定如何將其輸出到新列(如果有意義的話)。我認(rèn)為一個(gè)可能的解決方案是創(chuàng)建一個(gè)新的唯一公司名稱(chēng)列,并在其旁邊 SUMIF 列 D 中的所有適當(dāng)單元格。到目前為止的 Python 知識(shí)因此,使用下面的代碼,我采用了一個(gè)看起來(lái)更加混亂的電子表格,刪除了重復(fù)項(xiàng),根據(jù)公司名稱(chēng)進(jìn)行排序,并創(chuàng)建了一個(gè)包含相關(guān)數(shù)據(jù)列的新 pandas 數(shù)據(jù)庫(kù):corp_df 是我想要使用的清理后的新數(shù)據(jù)框。recipien_4 是公司的唯一 ID 號(hào),正如您所看到的那樣,它會(huì)在每次撥款時(shí)重復(fù)出現(xiàn)。屏幕截圖中的 Folia Biotech 顯示了一項(xiàng)重復(fù)的資助,正如我未包含在屏幕截圖中的一列所證明的那樣。如屏幕截圖所示,有很多重復(fù)項(xiàng)。import pandas as pdin_file = '2019-20 Grants and Contributions.csv'# create dataframe df = pd.read_csv(in_file)# sort in order of agreemen_1df.sort_values("recipien_2", inplace = True)# remove duplicatesdf.drop_duplicates(subset='agreemen_1', keep='first', inplace=True)corp_dict = { }# creates empty dict with only 1 copy of all corporation names, all values of 0for name in corp_df_2['recipien_2']: if name not in corp_dict: corp_dict[name] = 0# full name, id, grant $, longitude, latitudecorp_df = df[['recipien_2', 'recipien_4', 'agreemen_2','longitude','latitude']]任何提示或技巧將不勝感激,.ittertuples() 似乎不是一個(gè)好的解決方案,因?yàn)槲也淮_定如何過(guò)濾和比較數(shù)據(jù),或者是否保留數(shù)據(jù)類(lèi)型。但隨時(shí)證明我錯(cuò)了哈哈。我想也許有更好的方法來(lái)解決這個(gè)問(wèn)題,直接在 Excel 中而不是遍歷 pandas 數(shù)據(jù)框的行。這是一個(gè)非常開(kāi)放的問(wèn)題,所以感謝您提供您認(rèn)為最好的任何幫助或指導(dǎo)!
2 回答

POPMUISE
TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
我可以看到您正在使用 pandas 讀取文件 csv,因此您可以使用以下方法:
Group by
因此,您可以創(chuàng)建一個(gè)新的數(shù)據(jù)框,為公司名稱(chēng)進(jìn)行分組,如下所示:
dfnew = dp.groupby(['recipien_2','agreemen_2']).sum()
然后dfnew
有價(jià)值觀。
文檔熊貓組: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html

胡說(shuō)叔叔
TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
使用group_by后接 asum可能最適合您:
corp_df= df.group_by(by=['recipien_2', 'longitude','latitude']).apply(sum, axis=1)
#if you want to transform the index into columns you can add this after as well:
corp_df=corp_df.reset_index()
添加回答
舉報(bào)
0/150
提交
取消