繁体   English   中英

根据条件将值插入数据框列

[英]Insert value into a dataframe column based on condition

如何重写以下代码的最后两行,以使最后一行不会覆盖倒数第二行?

期望的结果是,“颜色”列中将根据满足以下条件输入“粉红色”或“橙色”值:“ KOM”或“ Top 10”。

import pandas as pd
import numpy as np

def contains_BO(seg_effs):  
        # check if segment efforts for activity contain any best overall effort
        for eff in seg_effs:
            rank = eff['kom_rank']
            if rank != None:
                if rank == 1:
                    return "KOM"
                else:
                    return "Top 10"

activities = pd.read_pickle('strava.pk1') 
activities['color'] = np.where(activities['segment_efforts'].map(contains_BO) == 'KOM', "orange", "grey")
activities['color'] = np.where(activities['segment_efforts'].map(contains_BO) == 'Top 10', "pink", "grey")

您使用类似这样的东西:

import pandas as pd

df = pd.DataFrame({"a": range(4), "b": ["x", "x", "y", "y"]})
df

   a  b
0  0  x
1  1  x
2  2  y
3  3  y

# assign 5 to rows of "a" where "b" == "x"
df.loc[df["b"] == "x", "a"] = 5
df

   a  b
0  5  x
1  5  x
2  2  y
3  3  y

或者,您可以根据值的字典创建新列:

df["val"] = df["b"].map({"x": 5, "y": 6})

df

   a  b  val
0  5  x    5
1  5  x    5
2  2  y    6
3  3  y    6

如果您需要更复杂的逻辑,则map也支持函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM