从 pandas 数据帧中获取特定结果

Getting a specific results from the pandas dataframe

提问人:user311790 提问时间:11/17/2023 更新时间:11/17/2023 访问量:31

问:

我有一个名为的数据框,其中包含球队的比赛历史。在数据框中,有三个特定的列,, .我想得到比方说的总比赛数,以及谁赢得了多少场比赛。我这样做的方式是ipl'Team1'WinningTeam'Team2'CSKMI

mivcsk_df = ipl[((ipl.Team1 == 'Mumbai Indians') & (ipl.Team2 == 'Chennai Super Kings')) | ((ipl.Team1 == 'Chennai Super Kings') & (ipl.Team2 == 'Mumbai Indians')) ]
mivcsk_df['WinningTeam'].value_counts()

我得到了想要的答案。

我也做到了

H2H=ipl.groupby(['Team1','Team2'])
H2H.get_group(('Mumbai Indians', 'Chennai Super Kings')).shape[0]
H2H=ipl.groupby(['Team2','Team1'])
H2H.get_group(('Mumbai Indians', 'Chennai Super Kings')).shape[0]

我在这里也得到了想要的答案。但是有没有更简洁的方法可以做到这一点,因为我认为这是解决我问题的更临时的解决方案。

Pandas 数据帧

评论


答:

0赞 Kais 11/17/2023 #1

我认为您可以使用 pandas 中的 groupby 和 value_counts 函数以更简洁、更有效的方式实现这一点。下面是一个示例:

import pandas as pd

mivcsk_df = ipl[(ipl['Team1'].isin(['Mumbai Indians', 'Chennai Super Kings'])) & (ipl['Team2'].isin(['Mumbai Indians', 'Chennai Super Kings']))]
mivcsk_matches = mivcsk_df['WinningTeam'].value_counts()

print("Total matches played between CSK and MI:", len(mivcsk_df))
print("CSK vs MI Head-to-Head:")
print(mivcsk_matches)

它首先筛选 DataFrame,使其仅包含 CSK 和 MI 之间的匹配项。然后,它使用 value_counts 函数来计算每支获胜球队的出现次数,提供一种简洁的方式来获取每支球队赢得的比赛数量。

1赞 Timeless 11/17/2023 #2

也许是指定值中所有团队的value_counts

cols, vals = ["Team1", "Team2"], ["Mumbai Indians", "Chennai Super Kings"]

out = ipl.loc[ipl[cols].isin(vals).all(axis=1), "WinningTeam"].value_counts()

评论

0赞 user311790 11/17/2023
好。因此,这个 .all 函数正在查找我们看到孟买印第安人和钦奈超级国王的所有可能组合
0赞 Timeless 11/17/2023
在这种情况下,当与 链接时,是的。isin