python - Pandas:通过分隔符拆分列并根据其他列重新排列
问题描述
让我们df
成为一个数据框。
In [1]: import pandas as pd
...: df = pd.DataFrame(columns = ['Home', 'Score', 'Away'])
...: df.loc[0] = ['Team A', '3-1', 'Team B']
...: df.loc[1] = ['Team B', '2-1', 'Team A']
...: df.loc[2] = ['Team B', '2-2', 'Team A']
...: df.loc[3] = ['Team A', '0-1', 'Team B']
In [2]: df
Out[2]:
Home Score Away
0 Team A 3-1 Team B
1 Team B 2-1 Team A
2 Team B 2-2 Team A
3 Team A 0-1 Team B
我想做df_1
出来df
。
In [4]: df_1
Out[4]:
Team A Team B
0 3 1
1 1 2
2 2 2
3 0 1
最简单的方法是什么?
作为初学者,我可以将一'Score'
列分成两列,然后遍历其他列并获取df_1
,但我想应该有一种更简单的方法,可能使用lambda
函数或group_by
方法。
有任何想法吗?
解决方案
如果只是两支球队,我们可以根据需要恢复比分。
where 函数如下所示,如果条件为真,则保持原值。如果没有,它可以从值列表中调用输入值。我们的条件是在团队上,而mapper是一个字符串的反转。
l_rev_string = lambda s: s[::-1]
df_score_rev = df.Score.apply(l_rev_string)
df1 = df.Score.where(df.Home == 'Team A', df_score_rev)\
.str.split('-',expand=True)\
.rename(columns = {0:'Team A',1:'Team B'})
| | Team A | Team B |
|---:|---------:|---------:|
| 0 | 3 | 1 |
| 1 | 1 | 2 |
| 2 | 2 | 2 |
| 3 | 0 | 1 |
推荐阅读
- python - python - 单行嵌套 For 循环
- javascript - 如果带有 OR 语句的公式没有按预期工作 - 我做错了什么?
- javascript - 使用类名 DOM Javascript 删除创建的元素
- angular - 将 Angular CLI 项目与 start.spring.io 项目合并?
- mysql - MySQL UPDATE 查询上的高 lock_time 导致服务器冻结
- javascript - 如何防止 CSS 文件在页面重新加载时重置?
- javascript - 剪切字符串并将其作为函数参数的一部分
- html - 省略 src= 的协议有什么好处?
- java - 在java中为特定条件创建哈希图
- php - 如何使用我的路由类创建动态 php 路由?(php)