根据条件用同一变量内的值复制和替换值

Copying and Replacing Values with Values Within the Same Variable Based on Condition

抱歉,如果标题不够具体,我是在 excel 中想象的。我有一个数据框:

           Product             Group             ...        Score_Alpha      Score_Beta
0           XXX0X1             Cinnamon          ...         0.007598         0.007538
1           XXX0X2             Cinnamon          ...         0.007598         0.007538
2           XXX0X3             Cinnamon          ...         0.007598         0.007538
3           XXX0X4             Cinnamon Special  ...         0.003343         0.002696
4           XXX0X5             Cinnamon Special  ...         0.003343         0.002696
5           XXX0X6             Cinnamon Special  ...         0.003343         0.002696
6           XXX0X7             Peach             ...         0.003399         0.004444
7           XXX0X8             Peach             ...         0.003399         0.004444
8           XXX0X9             Peach             ...         0.003399         0.004444
9           XXX0X10            Peach Special     ...         0.006677         0.006262
10          XXX0X11            Peach Special     ...         0.006677         0.006262
11          XXX0X12            Peach Special     ...         0.006677         0.006262

我需要将 Group =='Cinnamon Special' 行的 Score_Alpha 和 Score_Beta 替换为 'Cinnamon' 行, 'Peach Special' 和'Peach'。基本上,它应该是这样的:

           Product             Group             ...        Score_Alpha      Score_Beta
0           XXX0X1             Cinnamon          ...         0.007598         0.007538
1           XXX0X2             Cinnamon          ...         0.007598         0.007538
2           XXX0X3             Cinnamon          ...         0.007598         0.007538
3           XXX0X4             Cinnamon Special  ...         0.007598         0.007538
4           XXX0X5             Cinnamon Special  ...         0.007598         0.007538
5           XXX0X6             Cinnamon Special  ...         0.007598         0.007538
6           XXX0X7             Peach             ...         0.003399         0.004444
7           XXX0X8             Peach             ...         0.003399         0.004444
8           XXX0X9             Peach             ...         0.003399         0.004444
9           XXX0X10            Peach Special     ...         0.003399         0.004444
10          XXX0X11            Peach Special     ...         0.003399         0.004444
11          XXX0X12            Peach Special     ...         0.003399         0.004444

如果此类问题已经得到解答,我深表歉意,我的谷歌搜索技术值得怀疑。

我在组中有大约 30 多个唯一值和它们自己的 'XXX Special' 对应项,所以我无法按变量中的特定值手动分组

感谢阅读!

首先,获取 Score_Alpha 和 Score_Beta 的值,其中 Group =='Cinnamon'

scores = df.loc[df["Group"]=='Cinnamon',["Score_Alpha", "Score_Beta"]].iloc[0].tolist()

其次,把分数放到 df where Group =='Cinnamon Special'

df.loc[df["Group"]=='Cinnamon Special', ["Score_Alpha", "Score_Beta"]] = scores

同理,

scores = df.loc[df["Group"]=='Peach',["Score_Alpha", "Score_Beta"]].iloc[0].tolist()
df.loc[df["Group"]=='Peach Special', ["Score_Alpha", "Score_Beta"]] = scores

因为Group中有30+个unique values有自己的'XXX Special',你可以用一个函数来解决

# First, extract all group names without "Special"
names = [x for x in set(df["Group"].tolist()) if "Special" not in x]

# Second, define a function
def replace_values(df, name):
    scores = df.loc[df["Group"] == name, ["Score_Alpha", "Score_Beta"]].iloc[0].tolist()
    df.loc[df["Group"]== name + ' Special', ["Score_Alpha", "Score_Beta"]] = scores

# Third, iterate name in names
for name in group:
    replace_values(df, name)