从多个列中列出pandas数据帧行值

Juh*_*o M 6 python dataframe pandas

我有这样的数据pandas.DataFrame:

Date, Team1, Team2, Team1 Score, Team2 Score, Event
8/2/17, Juventus, Milan, 2, 1, Friendly match
6/2/17, Milan, Napoli, 3, 0, Friendly match
5/1/17, Milan, Sampdoria, 1, 0, Friendly match
25/12/16, Parma, Milan, 0, 5, Friendly match
Run Code Online (Sandbox Code Playgroud)

我怎么能列出米兰的进球数?

输出应该看起来像::

[1, 3, 1, 5]
Run Code Online (Sandbox Code Playgroud)

Psi*_*dom 7

您可以使用numpy数组布尔检索,在这里使用values获得的2D numpy的数组,并使用布尔索引来获取值,其中TeamMilan:

df[["Team1 Score", "Team2 Score"]].values[df[["Team1", "Team2"]] == "Milan"]
# array([1, 3, 1, 5])
Run Code Online (Sandbox Code Playgroud)


Mir*_*ber 5

这将完成工作:

pd.concat([df["Team1 Score"][df.Team1=='Milan'],df["Team2 Score"][df.Team2=='Milan']]).sort_index().values.tolist()
Run Code Online (Sandbox Code Playgroud)

输出是 [1, 3, 1, 5]


piR*_*red 5

# slice df with just team columns and get values
t = df[['Team1', 'Team2']].values

# find the row and column slices where equal to 'Milan'
i, j = np.where(t == 'Milan')

# then slice the scores array with those positions
s = df[['Team1 Score', 'Team2 Score']].values

s[i, j]

array([1, 3, 1, 5])
Run Code Online (Sandbox Code Playgroud)

我可以进一步压缩这个因为我知道所有列都在哪里

v = df.values
i, j = np.where(v[:, [1, 2]] == 'Milan')
v[:, [3, 4]][i, j]

array([1, 3, 1, 5])
Run Code Online (Sandbox Code Playgroud)