python - 根据 Pandas 中的单元格值索引列

标签 python pandas dataframe

我有一个比赛结果数据框。我想创建一个系列,它采用最后一个阶段的位置并减去之前所有阶段的平均值。这是 df 的一小部分(可能有更多阶段、国家和行)

race_location     stage1_position  stage2_position  stage3_position  number_of_stages
AUS               2.0              2.0              NaN              2
AUS               1.0              5.0              NaN              2
AUS               3.0              4.0              NaN              2
AUS               4.0              8.0              NaN              2
AUS               10.0             6.0              NaN              2
AUS               9.0              7.0              NaN              2
FRA               23.0             1.0              10.0             3
FRA               6.0              12.0             24.0             3
FRA               14.0             11.0             14.0             3
FRA               18.0             10.0             1.0              3
FRA               15.0             14.0             4.0              3
USA               24.0             NaN              NaN              1
USA               7.0              NaN              NaN              1
USA               22.0             NaN              NaN              1
USA               11.0             NaN              NaN              1
USA               8.0              NaN              NaN              1
USA               16.0             NaN              NaN              1
USA               13.0             NaN              NaN              1
USA               19.0             NaN              NaN              1
USA               5.0              NaN              NaN              1
USA               25.0             NaN              NaN              1

输出将是

last_stage_minus_average
0
4
1
4
-4
-2
-2
15
1.5             
-13            
-10.5           
0
0
0
0
0
0
0
0
0
0
0

这行不通,但我在想这样的事情:

new_series = []
for country in country_list:

    num_stages = df.loc[df['race_location'] == country, 'number_of_stages']

    differnce = df.ix[df['race_location'] == country, num_stages] -
        df.iloc[:, 0:num_stages-1].mean(axis=1)

    new_series.append(difference)

我不确定该怎么做。任何帮助或指导都会很棒!

最佳答案

#use pandas apply to take the mean for the first n-1 stages and subtract from last stage.
df.apply(lambda x: x.iloc[x.number_of_stages]-np.mean(x.iloc[1:x.number_of_stages]),axis=1).fillna(0)
Out[264]: 
0      0.0
1      4.0
2      1.0
3      4.0
4     -4.0
5     -2.0
6     -2.0
7     15.0
8      1.5
9    -13.0
10   -10.5
11     0.0
12     0.0
13     0.0
14     0.0
15     0.0
16     0.0
17     0.0
18     0.0
19     0.0
20     0.0
dtype: float64

关于python - 根据 Pandas 中的单元格值索引列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43599622/

相关文章:

python - AWS-CLI 抛出基于 Python 的意外 'Session' 错误

python - 将 pandas 时间序列重新采样到预定义的网格

python - 多个 DF 列的求和

Python:正则表达式函数通过电子邮件字符串解析并返回元组或如果输入无效则返回 ValueError

python - 从匹配条件的迭代中获取第一个项目

python-3.x - 如何生成频率为周二至周六(含)的 Pandas 日期范围?

python - 交换 CSV 文件中的列

python - 对 Pandas 中的数据进行排序

python - 优化 - 数据帧聚合在聚合过程中是否会使用不同的过滤器 : df. loc?

python - 在 PyDev 中运行 python 命令行解释器