首页 > 解决方案 > 将列表添加到数据帧,同时按长度 fo DF 连接

问题描述

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

我有一个 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'

我已经尝试过各种不同轴的连接方式,但我不知道如何处理这个问题。

任何帮助将不胜感激。

标签: pythonpandas

解决方案


让我们做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

推荐阅读