根据各种特征(列)

时间:2018-02-06 07:46:10

标签: python pandas

目标

我正在写一个纸牌游戏分析脚本。为方便起见,数据存储在Excel工作表中。因此,用户可以在excel表中输入每个游戏的信息,并使用python脚本分析游戏的返回。 3个竞争对手参与了纸牌游戏(总共4个人),我想分析一个玩家的整体回​​报。例如。我想知道我父亲在与汤姆打牌时赢了多少。

数据

excel表包含几个功能,如“date,start_time,end_time,duration,location,Pal1,Pal2,Pal3”和目标“Return”,正数为增益,负数为亏损。使用python pandas读取数据。

问题

我没有弄清楚如何索引某个朋友,因为他/她可能在“pal#”栏中。当涉及某个朋友时,我需要计算回报的平均值。

Excel表格(演示)

enter image description here

代码

path = 'excel.xlsx'
data_df = pd.read_excel(path)
def people_estimation(raw_data, name):
    data = raw_data
    df1 = data.pivot_table(columns=['牌友1'], values='收益', aggfunc=np.mean)
    df2 = data.pivot_table(columns=['牌友2'], values='收益', aggfunc=np.mean)
    df3 = data.pivot_table(columns=['牌友3'], values='收益', aggfunc=np.mean)
    interest = (df1[name] + df2[name] + df3[name])/3
    print("The gain with", name, "is :", interest)

注意

上面的代码实现了我想要的。但我认为有更好的方法可以做到这一点。谁能帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:0)

>>> a
   a  b  c
0  2  2  1
1  3  1  2
2  4  1  3
>>> mask = (a['a']==2) | (a['c']==2)
0     True
1     True
2    False
dtype: bool
>>> a[mask]
   a  b  c
0  2  2  1
1  3  1  2
>>> a[mask]['c']
0    1
1    2
Name: c, dtype: int64
>>> a[mask]['c'].mean()
1.5

我认为在你的代码中错误的是掩码的条件应该在括号中。

data[(data['牌友1'] == 'Tom') | (data['牌友2'] == 'Tom') | (data['牌友3'] == 'Tom')]['收益'].mean()