Skip to main content
 首页 » 编程设计

python之在按 DF 长度连接时将列表添加到数据框

2025年05月04日14powertoolsteam

无法为此找到解决方案,如果这看起来很简单,我们深表歉意。

我有一个 df 如下:

ID, Week 
5, 1 
6, 1 
7, 1 

我有一个原因代码列表如下

['Work', 'Holiday', 'Sick', 'Jury']  

我想做的是将其添加到我当前的数据框中,然后将其乘以每个唯一 ID

所以我会有类似的东西(为简洁起见,我将只使用 1 个唯一 ID)。,

ID, Week, Reason 
5,  1,    'Work' 
5,  1,    'Holiday' 
5,  1,    'Sick', 
5,  1,    'Jury' 

我已经尝试了各种不同轴的连接方式,但我对如何处理这个问题一无所知。

如有任何帮助,我们将不胜感激。

请您参考如下方法:

让我们做 unnesting

df['Reason']=[l]*len(df) 
unnesting(df,['Reason']) 
Out[1014]:  
    Reason  ID  Week 
0     Work   5     1 
0  Holiday   5     1 
0     Sick   5     1 
0     Jury   5     1 
1     Work   6     1 
1  Holiday   6     1 
1     Sick   6     1 
1     Jury   6     1 
2     Work   7     1 
2  Holiday   7     1 
2     Sick   7     1 
2     Jury   7     1 

# attached self-define function 
def unnesting(df, explode): 
    idx=df.index.repeat(df[explode[0]].str.len()) 
    df1=pd.concat([pd.DataFrame({x:np.concatenate(df[x].values)} )for x in explode],axis=1) 
    df1.index=idx 
    return df1.join(df.drop(explode,1),how='left') 

或者我们做交叉连接

df.merge(pd.DataFrame({'Reason':l}).assign(Week=1)) 
Out[1020]:  
    ID  Week   Reason 
0    5     1     Work 
1    5     1  Holiday 
2    5     1     Sick 
3    5     1     Jury 
4    6     1     Work 
5    6     1  Holiday 
6    6     1     Sick 
7    6     1     Jury 
8    7     1     Work 
9    7     1  Holiday 
10   7     1     Sick 
11   7     1     Jury