按标签系列重新索引 DataFrame 列
Reindex DataFrame Columns by Label Series
我有一系列标签
pd.Series(['L1', 'L2', 'L3'], ['A', 'B', 'A'])
和一个数据框
pd.DataFrame([[1,2], [3,4]], ['I1', 'I2'], ['A', 'B'])
我想要一个包含列 ['L1', 'L2', 'L3']
的数据框,列数据分别来自 'A'、'B'、'A'。像这样...
pd.DataFrame([[1,2,1], [3,4,3]], ['I1', 'I2'], ['L1', 'L2', 'L3'])
以一种很好的 pandas 方式。
这将生成您描述的数据框:
import pandas as pd
import numpy as np
data = [['A','B','A','A','B','B'],
['B','B','B','A','B','B'],
['A','B','A','B','B','B']]
columns = ['L1', 'L2', 'L3', 'L4', 'L5', 'L6']
pd.DataFrame(data, columns = columns)
既然你提到了reindex
#s=pd.Series(['L1', 'L2', 'L3'], ['A', 'B', 'A'])
#df=pd.DataFrame([[1,2], [3,4]], ['I1', 'I2'], ['A', 'B'])
df.reindex(s.index,axis=1).rename(columns=s.to_dict())
Out[598]:
L3 L2 L3
I1 1 2 1
I2 3 4 3
您可以使用 loc
访问器:
s = pd.Series(['L1', 'L2', 'L3'], ['A', 'B', 'A'])
df = pd.DataFrame([[1,2], [3,4]], ['I1', 'I2'], ['A', 'B'])
res = df.loc[:, s.index]
print(res)
A B A
I1 1 2 1
I2 3 4 3
或 iloc
访问器 columns.get_loc
:
res = df.iloc[:, s.index.map(df.columns.get_loc)]
这两种方法都允许访问重复的标签/位置,就像 NumPy 数组一样。
我有一系列标签
pd.Series(['L1', 'L2', 'L3'], ['A', 'B', 'A'])
和一个数据框
pd.DataFrame([[1,2], [3,4]], ['I1', 'I2'], ['A', 'B'])
我想要一个包含列 ['L1', 'L2', 'L3']
的数据框,列数据分别来自 'A'、'B'、'A'。像这样...
pd.DataFrame([[1,2,1], [3,4,3]], ['I1', 'I2'], ['L1', 'L2', 'L3'])
以一种很好的 pandas 方式。
这将生成您描述的数据框:
import pandas as pd
import numpy as np
data = [['A','B','A','A','B','B'],
['B','B','B','A','B','B'],
['A','B','A','B','B','B']]
columns = ['L1', 'L2', 'L3', 'L4', 'L5', 'L6']
pd.DataFrame(data, columns = columns)
既然你提到了reindex
#s=pd.Series(['L1', 'L2', 'L3'], ['A', 'B', 'A'])
#df=pd.DataFrame([[1,2], [3,4]], ['I1', 'I2'], ['A', 'B'])
df.reindex(s.index,axis=1).rename(columns=s.to_dict())
Out[598]:
L3 L2 L3
I1 1 2 1
I2 3 4 3
您可以使用 loc
访问器:
s = pd.Series(['L1', 'L2', 'L3'], ['A', 'B', 'A'])
df = pd.DataFrame([[1,2], [3,4]], ['I1', 'I2'], ['A', 'B'])
res = df.loc[:, s.index]
print(res)
A B A
I1 1 2 1
I2 3 4 3
或 iloc
访问器 columns.get_loc
:
res = df.iloc[:, s.index.map(df.columns.get_loc)]
这两种方法都允许访问重复的标签/位置,就像 NumPy 数组一样。