向屏蔽数据帧添加值

2024-04-23 08:51:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在dataframe的末尾添加一个新列,但是值会根据其他两列中的信息而变化。总的结果应该是一个新的列,其中另一列的绝对值已被重新缩放,将绝对值除以该列中的最高值

我试图屏蔽数据帧,但在for循环的末尾,整个df没有发生任何变化(即,当我请求海德博士()没有新列)

for n in list(top_dict.keys()):
    for c in clusters:
        mask=(data.season==n) & (data.cluster==c)
        for attribute in panel:
            ratio_list=[]
            for kpi in data[mask][attribute]:
                try:
                    ratio_list.append(kpi/top_dict[n][c][attribute]['Score'])
                except:
                    ratio_list.append(0)
            data[mask]['%s_ratio'%attribute]=ratio_list

运行代码后,旧的数据帧保持不变,不添加额外的列。你知道吗

数据样本:

season  cluster val_1   val_2   val_3
2014    A         0       5      8
2016    B         1       7      0
2015    C         2       9      8
2015    C         3       3      9
2017    A         4       5      1

Tags: 数据infordatatopattributemaskval
1条回答
网友
1楼 · 发布于 2024-04-23 08:51:59

你应该看到这个相当明确的警告:

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

这意味着data[mask]只是原始数据帧上的一个片段,不应尝试更改其中的元素,而应使用全局loc还原到原始数据帧:

data.loc[mask, '%s_ratio'%attribute]=ratio_list

这应该足以消除警告并更改数据帧。你知道吗

相关问题 更多 >