首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas:按分隔符拆分列,并根据其他列重新排列

Pandas:按分隔符拆分列,并根据其他列重新排列
EN

Stack Overflow用户
提问于 2020-07-12 20:26:58
回答 2查看 268关注 0票数 2

假设df是一个数据帧。

代码语言:javascript
复制
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变成df_1

代码语言:javascript
复制
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方法。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-12 20:59:30

您可以尝试这样做:

代码语言:javascript
复制
df["values"] = df.apply(lambda row: {row["Home"]:row["Score"].split("-")[0], row["Away"]:row["Score"].split("-")[1]}, axis=1)

output_df = pd.DataFrame(df["values"].tolist())

输出:

代码语言:javascript
复制
    Team A  Team B
0   3   1
1   1   2
2   2   2
3   0   1
票数 1
EN

Stack Overflow用户

发布于 2020-07-12 20:58:45

如果只有两支球队,我们可以在需要的时候恢复比分。

Where以以下方式工作,如果条件为真,它将保持原始值。如果不是,它可以调用值列表中的输入值。我们的条件是在团队中,而mapper是字符串的反转。

代码语言:javascript
复制
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'})
代码语言:javascript
复制
|    |   Team A |   Team B |
|---:|---------:|---------:|
|  0 |        3 |        1 |
|  1 |        1 |        2 |
|  2 |        2 |        2 |
|  3 |        0 |        1 |
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62861062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档