Python select 列在另一列的左边

Python select column on the left from another column

我对数据框中的 select 列有一个棘手的问题。我有一个数据框,其中的多个列具有相同的名称“PTime”。

这是我的数据框:

  PTime first_column  PTime third_column    PTime    fourth_column
0   4   first_value     1    first_value      6        first_value
1   4   second_value    2    second_value     7        second_value

这就是我想要的:

  PTime first_column       PTime    fourth_column
0   4    first_value        6        first_value
1   4    second_value       7        second_value

我将从列表中 select 我的专栏:

我的代码:

data = {'PTime': ['1', '1'],
        'first_column':  ['first_value', 'second_value'],
        'PTime': ['2', '2'],
        'third_column': ['first_value', 'second_value'],
        'PTime': ['4', '4'],
         'fourth_column': ['first_value', 'second_value'],
        }
list_c = ['PTime','first_column','fourth_column']

df = pd.DataFrame(data)

#df = df[df.columns.intersection(list_c)]

df = df[list_c]
df

所以我的目标是 select 列表中的列和 select 列表左侧的列。我如果你有任何想法这样做,非常感谢你。问候

我不知道如何在列表中离开一个 但是我有一个技巧可以得到你想要的table,如图所示

   PTime first_column       PTime    fourth_column

0   4    first_value        6        first_value

1   4    second_value       7        second_value

我们能做的就是简单地通过索引删除列 但是这里因为有同名 pandas 会尝试删除第一行 但是如果有重复的名称,你可以简单地重命名列,然后你可以使用索引删除列..

所以在这里找到一些逻辑来重命名它,比如 PTime1 .. PTime2 .. PTime3 .. 然后使用索引将其删除

df.drop(df.columns[i], axis=1,inplace=True)
                //  or //
df = df.drop(df.columns[i], axis=1)

这里你必须传递索引列表。在你的情况下它会像

df.drop(df.columns[[2,3]],axis=1)

重命名列后

在我的数据框中,我不会有多个同名的列。所有名称都将不同。

所以在我有十列的情况下 select 很难将它们全部列在一个列表中。

data = {'PTime1': ['1', '1'],
        'first_column':  ['first_value', 'second_value'],
        'PTime2': ['2', '2'],
        'third_column': ['first_value', 'second_value'],
        'PTime3': ['4', '4'],
         'fourth_column': ['first_value', 'second_value'],
        }
list_c = ['first_column','fourth_column']  #define column to select

df = pd.DataFrame(data)  #create dataframe

list_index = []  #create list to store index column
for col in list_c:   
    index_no = df.columns.get_loc(col)  #get index column
    list_index.append(index_no-1)  #insert index-1 in a list. Get column from the left
    list_index.append(index_no)  #insert index from the column in the list.

df = df.iloc[:, list_index]  #Subset the dataframe with the list of column selected.
df

像这样,我可以 select 列表中的列和列表中每个元素左侧的列。