如何根据熊猫中的if-else条件从元组索引中提取字符串?
Posted
技术标签:
【中文标题】如何根据熊猫中的if-else条件从元组索引中提取字符串?【英文标题】:How to extract a string from tuple index based on if-else condition in pandas? 【发布时间】:2020-11-10 08:23:29 【问题描述】:我的数据框df.shape (105,6)
import pandas as pd
import io
import ast
""" Ccom Wcom Lcom Dcom Total Winner
(A1, A2) -1.0 1.0 1.0 0.0 1.0 (A1, A2)
(A1, A3) -1.0 -1.0 1.0 1.0 0.0 (A1, A3)
(A1, A4) 1.0 -1.0 1.0 1.0 2.0 (A1, A4)
(A1, A5) -1.0 -1.0 -1.0 1.0 -2.0 (A1, A5)
(A1, A6) -1.0 -1.0 0.0 1.0 -1.0 (A1, A6) """
我想要根据条件在数据框的获胜者列中的索引名称(即元组)
if(df.Total > 0) --> Winner left i.e Winner = A1
elif(df.Total < 0) --> Winner right one i.e Winner = A2
elif(df.Total == 0 ) --> Winner='Draw' And keep a count of draw in both A1 and A2
输出应该是这样的:
Ccom Wcom Lcom Dcom Total Winner
(A1, A2) -1.0 1.0 1.0 0.0 1.0 A1
(A1, A3) -1.0 -1.0 1.0 1.0 0.0 Draw
(A1, A4) 1.0 -1.0 1.0 1.0 2.0 A1
(A1, A5) -1.0 -1.0 -1.0 1.0 -2.0 A5
(A1, A6) -1.0 -1.0 0.0 1.0 -1.0 A6
【问题讨论】:
【参考方案1】:通过索引[0]
、[1]
,将numpy.select
与索引中元组中的选择值一起使用:
m1 = df.Total > 0
m2 = df.Total < 0
df['Winner'] = np.select([m1, m2], [df.index.str[0], df.index.str[1]], default='Draw')
print (df)
Ccom Wcom Lcom Dcom Total Winner
(A1,A2) -1.0 1.0 1.0 0.0 1.0 A1
(A1,A3) -1.0 -1.0 1.0 1.0 0.0 Draw
(A1,A4) 1.0 -1.0 1.0 1.0 2.0 A1
(A1,A5) -1.0 -1.0 -1.0 1.0 -2.0 A5
(A1,A6) -1.0 -1.0 0.0 1.0 -1.0 A6
【讨论】:
这行得通,但是如果我想直接从索引中选择字符串而不用 (str[0], str[1]) 预先定义获胜者列怎么办?有办法吗? @Zee - 当然,使用df.index.str[0]
和 df.index.str[1]
完美。谢谢。如果是平局,还要计算df.index.str[0]
和df.index.str[1]
的平局次数? df.value_count()
这不是工作。因为我使用df.Winner.value_counts()
来计算获胜次数。我正在统计平局。我要计数index.str
计数以进行抽奖
@Zee - 你认为df.Winner.eq('Draw').sum()
和df.Total.eq(0).sum()
有什么相同之处吗?
@Zee - 哎呀,错过了最后一个 s
- value_counts
以上是关于如何根据熊猫中的if-else条件从元组索引中提取字符串?的主要内容,如果未能解决你的问题,请参考以下文章