我有一个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)
将其应用于数据帧行。
思想?
答案 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)