[英]How to extract information from one column to create a new column in a pandas data frame
我有很多 excel 文件,我想合并,但第一步,我正在尝试操作这些文件。 我的数据或多或少看起来像这样:
会议 | 类型 | 角色 |
---|---|---|
议会:12 | ||
1 | 常设 | 成员 |
1 | 常设 | 成员 |
议会:13 | ||
1 | 常设 | 成员 |
2 | 常设 | 成员 |
现在,我要做的是添加一个新列,其中包含来自会话列的议会信息,同时保持所有其他信息不变。 所以我最终的excel应该是这样的:
会议 | 类型 | 角色 | 议会 |
---|---|---|---|
1 | 常设 | 成员 | 12 |
1 | 常设 | 成员 | 12 |
1 | 常设 | 成员 | 13 |
2 | 常设 | 成员 | 13 |
你们能帮我理解如何解决这个问题吗?
您可以使用groupby
cumsum()
对每个部分组进行分组,然后只需在apply
函数中重构数据以匹配您想要的最终输出:
(df.groupby(df.session.str.contains('parliament').cumsum())
.apply(lambda s: s[1:].assign(parliament=s.head(1).session.item().strip('parliament: ')))
.reset_index(drop=True))
session type role parliament
0 1 standing member 12
1 1 standing member 12
2 1 standing member 13
3 2 standing member 13
这是一种方法
df[['txt','parliament']]=df['session'].str.split(':', expand=True).ffill()
df=df[(df['txt']!='parliament')]
df.drop(columns='txt')
session type role txt parliament
1 1 standing member 1 12
2 1 standing member 1 12
4 1 standing member 1 13
5 2 standing member 2 13
你可以在议会之后提取数字:然后在前面填写值:
out = (df[~df['session'].str.startswith('parliament')]
.join(df['session'].str.extract(r':\s(?P<parliament>\d+)').ffill()))
print(out)
# Output
session type role parliament
1 1 standing member 12
2 1 standing member 12
4 1 standing member 13
5 2 standing member 13
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.