我有兩個數據框。第一個命名mergedcsv
的格式爲: mergedcsv dataframepython dataframe groupby by dictionary list then sum
命名idgrp_df
第二數據幀是一個字典的格式,其對於每個區域編號對應的字符串ID的列表。 idgrp_df dataframe - keys with lists
對於mergedcsv每一行(以及在idgrp_df相應行)我想mergedcsv其中列標籤等於列表與idgrp_df該行內選擇的列。然後對這些特定值的值進行求和並將輸出結果添加到mergedcsv中的一列中。該函數將遍歷mergedcsv中的所有行(582行x 600列)。
我行代碼來嘗試嘗試是這樣的:
mergedcsv['TotRegFlows'] = mergedcsv.groupby([idgrp_df],as_index=False).numbers.apply(lambda x: x.iat[0].sum())
它返回一個ValueError: Grouper for class pandas.core.frame.DataFrame not 1-dimensional.
這就涉及到了GROUPBY輸入數據幀。如何訪問每行的列表作爲groupby的輸入?
因此,例如,對於mergedcsv中的第一行,我希望選擇標籤爲F95RR04
,F95RR06
和F95RR15
(從第一行idgrp_df中的列表中讀取)的列。將這一行的這些列中的值相加,然後將總和值插入TotRegFlows
列。
任何想法如何我可以利用列表將非常感激。
編輯:
非常感謝IanS。您的解決方案很有用。根據這條建議修改了代碼行之後,我意識到(如建議)我的兩個數據框中的索引都不同步。我測試了索引(mergedcsv有'None',idgrp_df有'REG_ID'列作爲索引,我也將mergedcsv設置爲'REG_ID',然後意識到mergedcsv有582行(REG_ID不唯一),idgrp_df有220行(REG_ID是唯一的)我爲此覺得我根據在mergedcsv REG_ID指數缺少GROUPBY 我已經修改了代碼如下:。
mergedcsv.set_index('REG_ID', inplace=True)
print mergedcsv.index.name
print idgrp_df.index.name
mergedcsvgroup = mergedcsv.groupby('REG_ID')[mergedcsv.columns].apply(lambda y: y.tolist())
mergedcsvgroup['TotRegFlows'] = mergedcsvgroup.apply(lambda row: row[idgrp_df.loc[row.name]].sum(), axis=1)
我有一個KeyError異常:「REG_ID」
任何進一步的建議是最受歡迎的。將groupby組合並應用於一行會更有效率嗎?
我是新來與大熊貓的工作,並試圖在Python積累經驗
進一步修訂:
如果沒有索引的mergedcsv:
,這將引發一個KeyError異常:(標籤[0]不在[索引]中,u'在索引0處出現)
索引爲mergedcsv:
mergedcsv.set_index('REG_ID', inplace=True)
columnlist = list(mergedcsv.columns.values)
mergedcsv['TotRegFlows'] = mergedcsv.apply(lambda row: row[idgrp_df.loc[row.name]].groupby('REG_ID')[columnlist].transform().sum(), axis=1)
,這將引發一個類型錯誤:( 「unhashable類型: '列表'」,在索引7' u'occurred)
或者最後分離GROUPBY功能:
columnlist = list(mergedcsv.columns.values)
mergedcsvgroup = mergedcsv.groupby('REG_ID')
mergedcsv['TotRegFlows'] = mergedcsvgroup.apply(lambda row: row[idgrp_df.loc[row.name]].sum())
這將引發TypeError:不可用類型列表。軸= 1參數也不適用於groupby應用。
任何想法如何使用應用函數列表?我已經在應用代碼中探索了元組,但沒有取得任何成功。
任何建議非常感謝。
我的回答是否幫助您解決問題?隨意要求澄清! – IanS
謝謝@IanS您的建議在比較兩個數據框時非常有用。我意識到第一個數據幀需要groupby。我編輯了原文,以反映這些變化。但仍有列表錯誤。任何進一步的建議將非常感激。 –
第一個關鍵錯誤是因爲一旦您將'REG_ID'設置爲索引,該列就會被刪除,您不能再對其進行分組。你可以這樣做(使用'groupby(level = 0)'),但由於'REG_ID'不是唯一的,我不認爲這是個好主意。 – IanS