如何在python中组合两个整数列

如何在python中组合两个整数列,python,pandas,Python,Pandas,我想将两个包含整数的列值组合在一起,并将其设置为输出数据集的索引列ID'将是我的索引 样本数据: 预期产出: 将索引和列转换为字符串并通过x连接,也用于提取列,因此不需要drop: df.index = df.index.astype(str) + '_' + df.pop('Ang').astype(str) 或使用: 如果还需要索引名称ID设置df.index.name: 对于第二种解决方案使用: 编辑: 如果存在具有.0值的浮点,请首先尝试转换为整数: df.index = (df.in

我想将两个包含整数的列值组合在一起,并将其设置为输出数据集的索引列ID'将是我的索引

样本数据:

预期产出:


将索引和列转换为字符串并通过x连接,也用于提取列,因此不需要drop:

df.index = df.index.astype(str) + '_' + df.pop('Ang').astype(str)
或使用:

如果还需要索引名称ID设置df.index.name:

对于第二种解决方案使用:

编辑:

如果存在具有.0值的浮点,请首先尝试转换为整数:

df.index = (df.index.astype('int').astype(str) + '_' + 
            df.pop('Ang').astype('int').astype(str))
如果无法转换为整数,则一个可能的原因是缺少值:

print (df)
        Ang         1
ID                   
23.0    0.0  0.889053
23.0   10.0  0.962773
23.0   20.0  1.004188
23.0   30.0  1.008301
105.0   0.0  0.334210
105.0  10.0  0.390434
105.0  20.0  0.434241
105.0  30.0  0.460348
47.0    NaN  0.020669
NaN    10.0  0.032299
47.0   20.0  0.050603
NaN     NaN  0.073371
pandas 0.24+的一个可能解决方案是转换为Int64:

或将缺少的值替换为某些整数,例如-1,然后将所有值转换为整数:

df.index = (df.index.fillna(-1).astype('int').astype(str) + '_' + 
            df.pop('Ang').fillna(-1).astype('int').astype(str))

print (df)
               1
23_0    0.889053
23_10   0.962773
23_20   1.004188
23_30   1.008301
105_0   0.334210
105_10  0.390434
105_20  0.434241
105_30  0.460348
47_-1   0.020669
-1_10   0.032299
47_20   0.050603
-1_-1   0.073371

将索引和列转换为字符串并通过x连接,也用于提取列,因此不需要drop:

df.index = df.index.astype(str) + '_' + df.pop('Ang').astype(str)
或使用:

如果还需要索引名称ID设置df.index.name:

对于第二种解决方案使用:

编辑:

如果存在具有.0值的浮点,请首先尝试转换为整数:

df.index = (df.index.astype('int').astype(str) + '_' + 
            df.pop('Ang').astype('int').astype(str))
如果无法转换为整数,则一个可能的原因是缺少值:

print (df)
        Ang         1
ID                   
23.0    0.0  0.889053
23.0   10.0  0.962773
23.0   20.0  1.004188
23.0   30.0  1.008301
105.0   0.0  0.334210
105.0  10.0  0.390434
105.0  20.0  0.434241
105.0  30.0  0.460348
47.0    NaN  0.020669
NaN    10.0  0.032299
47.0   20.0  0.050603
NaN     NaN  0.073371
pandas 0.24+的一个可能解决方案是转换为Int64:

或将缺少的值替换为某些整数,例如-1,然后将所有值转换为整数:

df.index = (df.index.fillna(-1).astype('int').astype(str) + '_' + 
            df.pop('Ang').fillna(-1).astype('int').astype(str))

print (df)
               1
23_0    0.889053
23_10   0.962773
23_20   1.004188
23_30   1.008301
105_0   0.334210
105_10  0.390434
105_20  0.434241
105_30  0.460348
47_-1   0.020669
-1_10   0.032299
47_20   0.050603
-1_-1   0.073371
你可以做:

# this is only needed as you set index_col = 0
df = df.reset_index()

# you could keep the columns by removing the call to drop
df = df.set_index(df[['ID', 'Ang']].astype(str).apply('_'.join, axis=1)).drop(['ID', 'Ang'], axis=1)

print(df)
输出

你可以做:

# this is only needed as you set index_col = 0
df = df.reset_index()

# you could keep the columns by removing the call to drop
df = df.set_index(df[['ID', 'Ang']].astype(str).apply('_'.join, axis=1)).drop(['ID', 'Ang'], axis=1)

print(df)
输出

让我们尝试一下,使用f-string Python 3.6+所需的set_索引和列表理解:

df = df.set_index('Ang', append=True)
df.index = [f'{i}_{j}' for i, j in df.index]
df.index.name = 'ID'
print(df)
输出:

               1
ID              
23_0    0.889053
23_10   0.962773
23_20   1.004188
23_30   1.008301
105_0   0.334210
105_10  0.390434
105_20  0.434241
105_30  0.460348
47_0    0.020669
47_10   0.032299
47_20   0.050603
47_30   0.073371
让我们尝试一下,使用f-string Python 3.6+所需的set_索引和列表理解:

df = df.set_index('Ang', append=True)
df.index = [f'{i}_{j}' for i, j in df.index]
df.index.name = 'ID'
print(df)
输出:

               1
ID              
23_0    0.889053
23_10   0.962773
23_20   1.004188
23_30   1.008301
105_0   0.334210
105_10  0.390434
105_20  0.434241
105_30  0.460348
47_0    0.020669
47_10   0.032299
47_20   0.050603
47_30   0.073371

对于我的输出df。。我在ID列中得到浮点值。例如23.0_0.0、23.0_10.0等等……我怎么能省略小数点位?@aXaY-你能检查一下工作中的df.index=df.index.astypeint.astypestr+'.'''+df.pop'Ang'.astypeint.astypestr吗?是的。现在它工作得很好。问题解决了。df.index=df.index.astypeint.astypestr+''.''+df.pop'Ang'.astypeint.astypestr工作正常。对于我的输出df。。我在ID列中得到浮点值。例如23.0_0.0、23.0_10.0等等……我怎么能省略小数点位?@aXaY-你能检查一下工作中的df.index=df.index.astypeint.astypestr+'.'''+df.pop'Ang'.astypeint.astypestr吗?是的。现在它工作得很好。问题解决了。df.index=df.index.astypeint.astypestr+''.''+df.pop'Ang'。astypeint.astypestr工作正常。