猿问

如何使用 pandas 的列与列列表和值列表之间的匹配来填充数据框?

我有一个这样的数据框:


df

col1    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 以最有效的方式做到这一点?


噜噜哒
浏览 121回答 3
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 col70     1    1  NaN  NaN  NaN  NaN  NaN1     2  NaN  NaN  NaN    2    3  NaN2     3  NaN  NaN  NaN  NaN  NaN  NaN3     4  NaN    4    5    6    7  NaN4     5  NaN  NaN    9  NaN  NaN    8

MM们

使用带有 zip 的循环解决方案并枚举计数器:for i, (a, b) in enumerate(zip(list1, list2)):    df.loc[i, a] = bprint (df)   col1 col2 col3 col4 col5 col6 col70     1    1  NaN  NaN  NaN  NaN  NaN1     2  NaN  NaN  NaN    2    3  NaN2     3  NaN  NaN  NaN  NaN  NaN  NaN3     4  NaN    4    5    6    7  NaN4     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 col70                              0    1  NaN  NaN  NaN  NaN  NaN1  NaN  NaN  NaN    2    3  NaN3  NaN    4    5    6    7  NaN4  NaN  NaN    9  NaN  NaN    8然后DataFrame.join:df = df[['col1']].join(df1)print (df)   col1 col2 col3 col4 col5 col6 col70     1    1  NaN  NaN  NaN  NaN  NaN1     2  NaN  NaN  NaN    2    3  NaN2     3  NaN  NaN  NaN  NaN  NaN  NaN3     4  NaN    4    5    6    7  NaN4     5  NaN  NaN    9  NaN  NaN    8

侃侃尔雅

使用简单的循环: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 col70     1    1  NaN  NaN  NaN  NaN  NaN1     2  NaN  NaN  NaN    2    3  NaN2     3  NaN  NaN  NaN  NaN  NaN  NaN3     4  NaN    4    5    6    7  NaN4     5  NaN  NaN    9  NaN  NaN    8
随时随地看视频慕课网APP

相关分类

Python
我要回答