[英]Pandas updating/adding columns to rows incrementally using dictionary key values
我想通過迭代遍歷列表(A_list)生成字典的方式來填充數據幀(df)的列,該字典中的鍵是df所需列的名稱(在下面的示例中,新列為'C','D '和'E') 注:我無法控制gen_data的輸出,它將返回字典,其中鍵是列名,值是列值。
import pandas
def gen_data(key):
#EXAMPLE FUNCTIONS THESE COULD BE ANYTHING AND NOT NECESSARY RELATED TO OTHER COLUMNS
data_dict = {'C':key+key, 'D':key, 'E':key+key+key}
return data_dict
A_list = ['a', 'b', 'c', 'd', 'f']
df = pandas.DataFrame({'A': ['a', 'b', 'c', 'd', 'e', 'f'], 'B': [1,2,3,3,2]})
for A_value in A_list:
data_dict = gen_data(A_value)
for data_key in data_dict:
df.loc[df.A == A_value, data_key] = data_dict[key]
因此,結果應為:
df = pandas.DataFrame({'A': ['a', 'b', 'c', 'd', 'e','f'],
'B': [1,2,3,3,2,1],
'C': ['aa','bb','cc','dd',nan,'ff'],
'D': ['a', 'b', 'c', 'd', nan,'f'],
'E': ['aaa','bbb','ccc','ddd',nan,'fff']})
我覺得
for data_key in data_dict:
df.loc[df.A == A_value, data_key] = data_dict[key]
如果df中有很多行,則效率真的很低,我覺得應該有一種方法可以刪除此代碼中的for循環。
for A_value in A_list:
data_dict = gen_data(A_value)
for data_key in data_dict:
df.loc[df.A == key, data_key] = data_dict[key]
我進行了實驗,發現用以下try except
塊替換for
循環可將計算速度提高三分之一。 except用於第一個循環,用新列填充數據框,否則將出現不匹配錯誤。 它仍然感覺效率低下,因此,我希望能收到任何改進的反饋。
import pandas
def gen_data(key):
#EXAMPLE FUNCTIONS THESE COULD BE ANYTHING AND NOT NECESSARY RELATED TO OTHER COLUMNS
data_dict = {'C':key+key, 'D':key, 'E':key+key+key}
return data_dict
A_list = ['a', 'b', 'c', 'd', 'f']
df = pandas.DataFrame({'A': ['a', 'b', 'c', 'd', 'e', 'f'], 'B': [1,2,3,3,2]})
for A_value in A_list:
data_dict = gen_data(A_value)
try:
df.loc[df.A == key] = df.loc[df.A == key].assign(**data_dict)
except ValueError:
df = df.reindex(df.columns.tolist() + list(data_dict.keys()))
df.loc[df.A == file_id] = df.loc[df.A == key].assign(**data_dict)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.