numpy 比较两列中的值并提取 Dataframe 中第三列的值

oxcyiej7  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(150)

比较两列中的值并提取 Dataframe 中第三列的值
df =
| 位置|团队|目标|
| - -|- -|- -|
| 一个|A级|五个|
| 一个|B|六个|
| 2个|A级|七个|
| 2个|B|五个|
| 2个|C语言|六个|
| 三个|B|七个|
预期输出df =
| 位置|A团队|A团队目标|B队|B组目标|C队|C团队目标|
| - -|- -|- -|- -|- -|- -|- -|
| 一个|一个|五个|一个|六个|第0页|不适用|
| 2个|一个|七个|一个|五个|一个|六个|
| 三个|第0页|不适用|一个|七个|第0页|不适用|

chy5wohz

chy5wohz1#

示例代码

data = {'Location': {0: 1, 1: 1, 2: 2, 3: 2, 4: 2, 5: 3},
        'teams': {0: 'A', 1: 'B', 2: 'A', 3: 'B', 4: 'C', 5: 'B'},
        'goals': {0: 5, 1: 6, 2: 7, 3: 5, 4: 6, 5: 7}}
df = pd.DataFrame(data)

第一个

使用groupby进行聚合

(df.groupby(['Location', 'teams'])['goals'].agg(['count', sum])
 .unstack().swaplevel(0, 1, axis=1).sort_index(axis=1))

输出:

teams   A               B               C
        count   sum     count   sum     count   sum
Location                        
1       1.0     5.0     1.0     6.0     NaN     NaN
2       1.0     7.0     1.0     5.0     1.0     6.0
3       NaN     NaN     1.0     7.0     NaN     NaN

第二个

让我们创建idx来更改列

idx = pd.MultiIndex.from_product([df['teams'].unique(), ['Team', 'Team Goal']]).map(lambda x: ' '.join(x))

idx

Index(['A Team', 'A Team Goal', 'B Team', 'B Team Goal', 'C Team', 'C Team Goal'], dtype='object')

最后一个

更改列和reset_index(包括第一个代码)

(df.groupby(['Location', 'teams'])['goals'].agg(['count', sum])
 .unstack().swaplevel(0, 1, axis=1).sort_index(axis=1)
 .set_axis(idx, axis=1).reset_index())

输出

Location    A Team  A Team Goal B Team  B Team Goal C Team  C Team Goal
0   1           1.0     5.0         1.0     6.0         NaN     NaN
1   2           1.0     7.0         1.0     5.0         1.0     6.0
2   3           NaN     NaN         1.0     7.0         NaN     NaN
5vf7fwbs

5vf7fwbs2#

使用透视重新调整数据框架以获取目标。检查goals中的非空值以标识teams,然后检查join以获取结果

goals = df.pivot(*df.columns)
teams = s.notna().astype(int)

teams.add_suffix(' Team').join(goals.add_suffix(' Team Goals'))

测试结果

teams     A Team  B Team  C Team  A Team Goals  B Team Goals  C Team Goals
Location                                                                  
1              1       1       0           5.0           6.0           NaN
2              1       1       1           7.0           5.0           6.0
3              0       1       0           NaN           7.0           NaN

相关问题