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 列表中的列和列表中每个元素左侧的列。
我对数据框中的 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 列表中的列和列表中每个元素左侧的列。