亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 pandas 的列與列列表和值列表之間的匹配來填充數據框?

如何使用 pandas 的列與列列表和值列表之間的匹配來填充數據框?

嚕嚕噠 2022-04-23 16:53:44
我有一個這樣的數據框:dfcol1    col2    col3    col4    col5    col6     col7 1 2 3 4 5從 col2 到 col7 的值現在是空的,現在我有兩個列表,list1=[['col2'],['col5','col6'],[],['col3','col4','col5','col6'],['col7','col4']]list2=[['1'],['2','3'],[],['4','5','6','7'],['8','9']]如果列名與 list 匹配,我想填充數據框,并且 list2 具有相應的值結果 df 應該看起來像,col1    col2    col3    col4    col5    col6     col7 1       1       NA      NA      NA      NA       NA 2       NA      NA      NA      2       3        NA 3       NA      NA      NA      NA      NA       NA 4       NA       4       5       6      7        NA 5       NA      NA       9      NA      NA       8如何使用 pandas、python 以最有效的方式做到這一點?
查看完整描述

3 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

我將要做的


df.update(pd.concat([pd.DataFrame(data=[z],columns=y,index=[x]) for x , (y, z) in enumerate(zip(list1,list2))]))

df

   col1 col2 col3 col4 col5 col6 col7

0     1    1  NaN  NaN  NaN  NaN  NaN

1     2  NaN  NaN  NaN    2    3  NaN

2     3  NaN  NaN  NaN  NaN  NaN  NaN

3     4  NaN    4    5    6    7  NaN

4     5  NaN  NaN    9  NaN  NaN    8


查看完整回答
反對 回復 2022-04-23
?
MM們

TA貢獻1886條經驗 獲得超2個贊

使用帶有 zip 的循環解決方案并枚舉計數器:


for i, (a, b) in enumerate(zip(list1, list2)):

    df.loc[i, a] = b


print (df)

   col1 col2 col3 col4 col5 col6 col7

0     1    1  NaN  NaN  NaN  NaN  NaN

1     2  NaN  NaN  NaN    2    3  NaN

2     3  NaN  NaN  NaN  NaN  NaN  NaN

3     4  NaN    4    5    6    7  NaN

4     5  NaN  NaN    9  NaN  NaN    8

或嘗試創建 3 列 DataFrame,然后pivot:


a = [(i, a1, b1) for i, (a, b) in enumerate(zip(list1, list2)) for a1, b1 in zip(a, b)]


df1 = pd.DataFrame(a).pivot(0,1,2)

print (df1)

1 col2 col3 col4 col5 col6 col7

0                              

0    1  NaN  NaN  NaN  NaN  NaN

1  NaN  NaN  NaN    2    3  NaN

3  NaN    4    5    6    7  NaN

4  NaN  NaN    9  NaN  NaN    8

然后DataFrame.join:


df = df[['col1']].join(df1)

print (df)

   col1 col2 col3 col4 col5 col6 col7

0     1    1  NaN  NaN  NaN  NaN  NaN

1     2  NaN  NaN  NaN    2    3  NaN

2     3  NaN  NaN  NaN  NaN  NaN  NaN

3     4  NaN    4    5    6    7  NaN

4     5  NaN  NaN    9  NaN  NaN    8


查看完整回答
反對 回復 2022-04-23
?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

使用簡單的循環:


In [54]: for i, col_names in enumerate(list1): 

    ...:     df.loc[i, col_names] = list2[i] 

    ...:         

    ...:                                                                                                             


In [55]: df                                                                                                          

Out[55]: 

   col1 col2 col3 col4 col5 col6 col7

0     1    1  NaN  NaN  NaN  NaN  NaN

1     2  NaN  NaN  NaN    2    3  NaN

2     3  NaN  NaN  NaN  NaN  NaN  NaN

3     4  NaN    4    5    6    7  NaN

4     5  NaN  NaN    9  NaN  NaN    8


查看完整回答
反對 回復 2022-04-23
  • 3 回答
  • 0 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號