如何根据python中的其他列值创建另一列?

时间:2019-11-21 06:43:37

标签: python pandas dataframe for-loop

我有以下具有以下代码的数据框:

for i in range(int(tower1_base),int(tower1_top)):
     if i not in tower1_not_included_int :
         df = pd.concat([df, pd.DataFrame({"Tower": 1, "Floor": i, "Unit": list("ABCDEFG")})],ignore_index=True)

Result:
   Tower    Floor   Unit
0   1       1.0      A
1   1       1.0      B
2   1       1.0      C
3   1       1.0      D
4   1       1.0      E
5   1       1.0      F
6   1       1.0      G

如何创建这样的另一个索引列?

   Tower    Floor   Unit     Index
0   1       1.0      A       1A1
1   1       2.0      B       1B2
2   1       3.0      C       1C3
3   1       4.0      D       1D4 
4   1       5.0      E       1E5
5   1       6.0      F       1F6
6   1       7.0      G       1G7

2 个答案:

答案 0 :(得分:0)

您可以简单地添加列:

.filter

将其输出为数据框的第一个版本:

df['Index'] = df['Tower'].astype(str)+df['Unit']+df['Floor'].astype(int).astype(str)

答案 1 :(得分:0)

另一种方法。 我创建了数据框的副本,并对列进行了重新排序,以使“融化”更加容易。

dfAl = df.reindex(columns=['Tower','Unit','Floor'])

to_load = []  #list to load the new column
vals    = pd.DataFrame.to_numpy(dfAl)   #All values extracted

for sublist in vals:
    combs = ''.join([str(i).strip('.0') for i in sublist]) #melting values
    to_load.append(combs)

df['Index'] = to_load

如果您确实希望“索引”列为真实索引,请执行最后一步:

df = df.set_index('Index')

print(df)

        Tower  Floor Unit
Index                   
1A1        1    1.0    A
1B2        1    2.0    B
1C3        1    3.0    C
1D4        1    4.0    D
1E5        1    5.0    E
1F6        1    6.0    F
1G7        1    7.0    G