首页 > 解决方案 > 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方法。

有任何想法吗?

标签: pythonpandasfiltergroup-bysplit

解决方案


如果只是两支球队,我们可以根据需要恢复比分。

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 |


推荐阅读