Skip to main content
 首页 » 编程设计

Python,数据帧 : duplicating elements in a column of lists and attributing to them rows in another column

2025年05月04日16JeffreyZhao

我想将数据框的一行复制到它的第一列中的元素。

我有以下数据框:

     columns_A           columns_B 
0    [1,2,3,4]           ['bob', 'mary'] 
1    [7,9]               ['banana', 'apple'] 

我想要的结果是:

     columns_A            columns_B 
0    1                   ['bob', 'mary'] 
1    2                   ['bob', 'mary'] 
2    3                   ['bob', 'mary'] 
3    4                   ['bob', 'mary'] 
4    7                   ['banana', 'apple'] 
5    9                   ['banana', 'apple'] 

现在我可以访问 column_A 的列表,但我无法将 column_B 中的相应列表分配给每个元素。 下面的代码让我的第一行 column_B 到所有元素。我不知道如何根据第 1 行在 column_A 中的位置来归属该行。

for line1 in df.column_A: 
    for i in line1: 
        s= {i : df.column_B[0]}  
        print s  

谢谢你的帮助

请您参考如下方法:

我想你可以使用 numpy.repeat按长度重复值 str.len和 chain 的嵌套 lists 的平面值:

from itertools import chain 
 
df2 = pd.DataFrame({ 
        "columns_B": np.repeat(df.columns_B.values, df.columns_A.str.len()), 
        "columns_A": list(chain.from_iterable(df.columns_A))}) 
 
print (df2) 
   columns_A        columns_B 
0          1      [bob, mary] 
1          2      [bob, mary] 
2          3      [bob, mary] 
3          4      [bob, mary] 
4          7  [banana, apple] 
5          9  [banana, apple] 

纯 pandas 解决方案是 join Series 由 DataFrame 构造函数和 stack 创建:

df2 = pd.DataFrame(df.columns_A.values.tolist()) 
        .stack() 
        .reset_index(level=1, drop=True) 
        .astype(int) 
        .rename('columns_A') 
print (df2) 
0    1 
0    2 
0    3 
0    4 
1    7 
1    9 
Name: columns_A, dtype: int32 
 
print (df.drop('columns_A', axis=1).join(df2).reset_index(drop=True)) 
         columns_B  columns_A 
0      [bob, mary]          1 
1      [bob, mary]          2 
2      [bob, mary]          3 
3      [bob, mary]          4 
4  [banana, apple]          7 
5  [banana, apple]          9