我有一个带有索引的数据框,有时包含具有相同索引值的行。现在我想对该数据帧进行切片并根据行索引设置值。
考虑以下示例:
import pandas as pd
df = pd.DataFrame({'index':[1,2,2,3], 'values':[10,20,30,40]})
df.set_index(['index'], inplace=True)
df1 = df.copy()
df2 = df.copy()
#copy warning
df1.iloc[0:2]['values'] = 99
print(df1)
df2.loc[df.index[0:2], 'values'] = 99
print(df2)
df1 是预期结果,但给了我一个SettingWithCopyWarning。
df2 似乎是文档建议的访问方式,但给了我错误的结果(因为重复索引)
是否有一种“正确”的方法可以在存在重复索引值的情况下正确设置这些值?
.loc
当您有重复索引时不建议使用。所以你必须进行基于位置的选择iloc http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iloc.html。由于我们需要传递位置,因此我们必须使用get_loc http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.get_loc.html用于获取列的位置:
print (df2.columns.get_loc('values'))
0
df1.iloc[0:2, df2.columns.get_loc('values')] = 99
print(df1)
values
index
1 99
2 99
2 30
3 40
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)