簡體   English   中英

熊貓使用字典鍵值增量更新/向行添加列

[英]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.

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