python - 将列表添加到数据帧,同时按长度 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'
我已经尝试过各种不同轴的连接方式,但我不知道如何处理这个问题。
任何帮助将不胜感激。
解决方案
让我们做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
推荐阅读
- spring - 无法使用 Spring Boot 生成 DDL 创建脚本
- ios - 无法将记录添加到 SQLite 数据库
- django - 在 Django 中创建用户后如何返回 JWT 令牌?
- reactjs - MUI ThemeProvider 未在已编译组件中注入主题
- html - 无法水平对齐导航栏中的链接和徽标
- gitlab - 无法通过 SSH 而不是 HTTP 使用运行器克隆项目
- html - 如何预防单击内部元素时展开/折叠
?
- php - Laravel:将 QueryBuilder 转换为 Eloquent:ORM
- javascript - SumoSelect 取消选择其他选项
- r - 所有数值变量平均值的组间差异