假设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变成df_1。
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方法。
有什么想法吗?
发布于 2020-07-12 20:59:30
您可以尝试这样做:
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())输出:
Team A Team B
0 3 1
1 1 2
2 2 2
3 0 1发布于 2020-07-12 20:58:45
如果只有两支球队,我们可以在需要的时候恢复比分。
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 |https://stackoverflow.com/questions/62861062
复制相似问题