无法为此找到解决方案,如果这看起来很简单,我们深表歉意。
我有一个 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
