重命名Pandas

时间:2017-01-19 09:44:19

标签: python pandas numpy

我有一个Pandas数据框,其中索引是参与社会学测试的受访者的数字主题ID。

基本上,问题是双重的。

A)。如何在Pandas DataFrame中重命名单个重复索引?

部分数据如下所示(第一列是索引):

subject build   gender_response
7   5.0.6.0 Female
5   5.0.6.0 Male
4   5.0.6.0 Male
3   5.0.6.0 Female
3   5.0.6.0 Female
1   5.0.6.0 Male

例如,我只需将索引(“3”)中的一个重置为任何其他整数。

我已尝试过pandas文档中的主要功能 - http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.rename.html但是,如果我将参数“Inplace”设置为True,则没有任何反应:

master.iloc[3].rename(120, inplace=True)

如果我创建一个新变量并使用不带此参数的相同表达式,它将返回带有新索引的Pandas.Series :(但我需要将其应用于新数据帧。

master2 = master.iloc[3].rename(120)

B)。如何根据其他列中的值进行更改?

  subject   time    Gender  Age
7   12:30:10    Female  23
5   12:23:10    Male    18
4   12:22:17    Male    36
3   12:16:55    Female  45
3   12:16:16    Female  67
1   12:05:22    Male    28

例如,我已经进行了测试的“时间”列。我试图通过Pandas应用功能来实现,例如:

time_point = pd.Timestamp(1/19/2017 12:16:55)
def filter_by_time(x):
  if x[time] == Timestamp:
     x.index.rename(120)

将其应用于数据帧行。

思想?

1 个答案:

答案 0 :(得分:1)

对于查询1,

您正在基于索引位置重命名索引。因此,您可以尝试master.index.values[3] = 120而不是master.iloc[3].rename(120, inplace=True)

对于查询2,试试这个

def filter_by_time(x):
    if x.name == "time":
        for index, value in enumerate(x):
            if value == pd.Timestamp("1/19/2017 12:16:55").strftime("%H:%M:%S"):
                master.index.values[index] = 120 
master.apply(filter_by_time)