我有一个数据框:
df =
first_stage_anchor_generator {
grid_anchor_generator {
scales: [0.25, 0.5, 1.0, 2.0]
aspect_ratios: [0.25, 1.0, 2.0]
height_stride: 8
width_stride: 8
}
我的单位也有一系列,定义为
su =
time time b
0 0.0 1.1 21
1 0.1 2.2 22
2 0.2 3.3 23
3 0.3 4.4 24
4 0.4 5.5 24
现在,我想将df.index设置为等于“时间(sal)”值。这些值可以在任何列中,我需要检查。
我可以这样:
time sal
time zulu
b m/s
但是,我的索引看起来像:
df.index = df.values[:,(df.columns == 'time') & (su.values == 'sal')]
但是,这是一个数组数组。在更大的数据集中,绘图似乎需要更长的时间。如果我对值进行硬编码,则只会得到一个数组:
array([[0.0],
[0.1],
[0.2],
[0.3],
[0.4]])
我还可以执行以下操作:
df.index = df[0,0]
array([0.0, 0.1, 0.2, 0.3, 0.4])
这会将“ inx”设置为0,然后得到一个数组
inx = ((df.columns == 'time') & (s.values == 'sal')).tolist().index(True)
但是,我不必这样做。我在使用熊猫和布尔索引时使用不正确吗?
我想要:
df =
df.index=df.values[0,inx]
答案 0 :(得分:1)
据我了解,这就是您所期望的。但是,我将时间名称重命名为time1和time2,否则将无法创建具有相同名称的字典。
df = {'time1': [0.0,0.1,0.2,0.3,0.4], 'time2': [1.1,2.2,3.3,4.4,5.5],'b':[21,22,23,24,24]}
su = {'time1':'sal', 'time2':'zulu', 'b':'m/s'}
indexes = df[su.keys()[su.values().index('sal')]]
df = pd.DataFrame(df, index=indexes, columns=['time1', 'time2', 'b'])
print df
答案 1 :(得分:0)
您的原始DataFrame具有重复的列名,这使操作变得复杂。 尝试修改列的名称。
unit = pd.Series(['sal', 'zulu', 'm/s'], index=['time', 'time', 'b'])
>>> df
time time b
0 0.0 1.1 21.0
1 0.1 2.2 22.0
2 0.2 3.3 23.0
3 0.3 4.4 24.0
4 0.4 5.5 25.0
new_col = ['{}({})'.format(df.columns[i], unit[i]) for i in range(len(df.columns))]
>>> new_col
['time(sal)', 'time(zulu)', 'b(m/s)']
>>> df.columns = new_col
>>> df
time(sal) time(zulu) b(m/s)
0 0.0 1.1 21.0
1 0.1 2.2 22.0
2 0.2 3.3 23.0
3 0.3 4.4 24.0
4 0.4 5.5 25.0
>>> df.index = df['time(sal)'].values
>>> df
time(sal) time(zulu) b(m/s)
0.0 0.0 1.1 21.0
0.1 0.1 2.2 22.0
0.2 0.2 3.3 23.0
0.3 0.3 4.4 24.0
0.4 0.4 5.5 25.0