如何根据熊猫中的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条件从元组索引中提取字符串?的主要内容,如果未能解决你的问题,请参考以下文章

(Swift)如何从元组数组[(Date, MyClass)]中获取元组元素(Date, MyClass)的索引?

从元组中提取向量

如何有条件地从元组列表中删除元素?

从元组中提取向量

如何根据在熊猫数据框中的其他列上应用条件来提取列值

从元组列表中获取具有“NaN”的元组索引