Python/Pandas:根据另一个数据框过滤和组织数据框的行和列
Python/Pandas: filter and organize the rows and columns of a dataframe based on another dataframe
我有两个数据帧,例如下面的 df1、df2。
我愿意:
- filter df1:即去掉行和列,使其具有与df2相同的索引元素和列。保留的列和行的 table 中的元素不应被修改。
- 此外,我想组织这个'filtered'数据框的行和列,以便它的行和列的顺序与df2相同。
数据帧 df1
是:
index
x_3
x_1
x_2
10
110
126
112
11
131
140
143
12
130
128
116
13
118
150
125
14
102
117
110
15
103
105
148
16
116
114
114
17
120
132
110
..和第二个数据帧(df2
)如:
index
x_1
x_2
x_3
10
1
1
5
11
4
1
2
14
2
2
4
15
1
2
1
16
2
4
1
最终结果为df3,即:
index
x_1
x_2
x_3
10
126
112
110
11
140
143
131
14
117
110
102
15
105
148
103
16
114
114
116
有什么见解吗?
您可以使用.reindex_like
根据index
来符合df1
的index
和columns
和 columns
共 df2
:
df3 = df1.reindex_like(df2)
>>> df3
x_1 x_2 x_3
index
10 126 112 110
11 140 143 131
14 117 110 102
15 105 148 103
16 114 114 116
df1.loc[df2.index, df2.columns]
Shubham 的回答非常 pythonic。使用 loc 也是从第一原则出发的简单方法。
我有两个数据帧,例如下面的 df1、df2。 我愿意:
- filter df1:即去掉行和列,使其具有与df2相同的索引元素和列。保留的列和行的 table 中的元素不应被修改。
- 此外,我想组织这个'filtered'数据框的行和列,以便它的行和列的顺序与df2相同。
数据帧 df1
是:
index | x_3 | x_1 | x_2 |
---|---|---|---|
10 | 110 | 126 | 112 |
11 | 131 | 140 | 143 |
12 | 130 | 128 | 116 |
13 | 118 | 150 | 125 |
14 | 102 | 117 | 110 |
15 | 103 | 105 | 148 |
16 | 116 | 114 | 114 |
17 | 120 | 132 | 110 |
..和第二个数据帧(df2
)如:
index | x_1 | x_2 | x_3 |
---|---|---|---|
10 | 1 | 1 | 5 |
11 | 4 | 1 | 2 |
14 | 2 | 2 | 4 |
15 | 1 | 2 | 1 |
16 | 2 | 4 | 1 |
最终结果为df3,即:
index | x_1 | x_2 | x_3 |
---|---|---|---|
10 | 126 | 112 | 110 |
11 | 140 | 143 | 131 |
14 | 117 | 110 | 102 |
15 | 105 | 148 | 103 |
16 | 114 | 114 | 116 |
有什么见解吗?
您可以使用.reindex_like
根据index
来符合df1
的index
和columns
和 columns
共 df2
:
df3 = df1.reindex_like(df2)
>>> df3
x_1 x_2 x_3
index
10 126 112 110
11 140 143 131
14 117 110 102
15 105 148 103
16 114 114 116
df1.loc[df2.index, df2.columns]
Shubham 的回答非常 pythonic。使用 loc 也是从第一原则出发的简单方法。