难以替换Pandas列

时间:2016-08-28 20:46:50

标签: python pandas

第一次在这里发帖,对Python很新,并且在pandas专栏中重写值有些困难。我有一个包含一些列的数据框(其中包括'Ba Avg','Study','Latitude','Upper Depth'等)。我试图平均一些值并将它们写入一个名为“Upper Avg”的新列。

在开始时,我创建了一个名为“Upper Avg”的新列,并将df的索引保存为列表。

接下来,对于来自'Study'1020的数据帧的行,我使他们的'Upper Avg'与他们的'Ba Avg'相同。这虽然可能效率不高,但完全没问题。

接下来我想处理研究191,但我希望他们的'上平均'是研究中每个'Ba Avg'的平均值,它位于同一位置('纬度')并且值为a, b,或c在他们的'ConstraintCol'中。为此,我制作了一组纬度值,然后循环遍历值,分别查找具有该纬度的值(在多个研究中不重复纬度),使用这些值创建新的df。然后我制作一个满足称为“范围”约束的df。我将范围索引保存到列表中,然后执行我想要的平均值,将值保存为'avg'。

这里的问题是当我尝试将此值avg放入df时。我尝试过使用loc并使用replace,每次更换时都会在以后查看df时保存值。

对于冗长的帖子感到抱歉,但感谢任何指导!

df['Upper Avg'] = ""
index = df.index.tolist()

for i in index:
    if df['Study'][i] == 1020: 
        df['Upper Avg'][i] = df['Ba Avg'][i]

lats = set(df[df['Study'] == 191]['Latitude'])
for i in lats: 
    latset = df[df['Latitude'] == i]
    constraint = [a,b,c]
    ranges = latset[latset['ConstraintCol'].isin(constraint)]
    idx = ranges.index.tolist()
    avg = ranges['Ba Avg'].sum() / 3
    df.loc[idx]['Upper Avg'] = avg

2 个答案:

答案 0 :(得分:1)

从这开始。这是np.where outcome = np.where(condition,true,false)

#df['Upper Avg'] = ""
#index = df.index.tolist()

# for i in index:
#     if df['Study'][i] == 1020: 
#         df['Upper Avg'][i] = df['Ba Avg'][i]

df['Upper Avg'] = np.where(df['Study'] == 1020, df['Ba Avg'], np.nan)        


lats           = set(df[df['Study'] == 191]['Latitude'])
for i in lats: 
    latset     = df[df['Latitude'] == i]
    constraint = [a,b,c]
    ranges     = latset[latset['ConstraintCol'].isin(constraint)]
    idx        = ranges.index.tolist()
    avg        = ranges['Ba Avg'].sum() / 3
    df.loc[idx]['Upper Avg'] = avg

答案 1 :(得分:1)

当您使用.loc,.ix和.iloc时,如果您使用语法,则可能(正确地)获得有关在副本上设置值的警告:

df.loc[index]["column"]

正确执行此操作的方法如下:

df.loc[index, "column"]

注意区别。如果您创建一个已经是视图的视图,它往往与原始数据框分开,因此您对此视图视图所做的任何编辑都不会保留。

您正在做的事情称为链式索引,通常不起作用。见下面的链接。理解这一点的最简单方法是,如果您正在调用一个在数据框上运行的(.loc,.ix,.iloc),那么您的更改将在数据框的原始副本上,并且将是永久性的。如果您正在执行多个操作,例如df [col] [index],那么您很可能正在编辑副本(而不是原始数据帧)。

http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy

相关问题