【问题标题】:take subset from a dataframe从数据框中获取子集
【发布时间】:2021-08-11 17:16:34
【问题描述】:
我打算从数据框中获取一个子集。
| A |
B |
C |
Label |
| 3 |
2 |
3 |
chair |
| 2 |
4 |
5 |
table |
| 3 |
2 |
3 |
table |
| 2 |
4 |
5 |
chair |
| 3 |
2 |
3 |
drawer |
| 2 |
4 |
5 |
drawer |
| 3 |
2 |
3 |
chair |
| 2 |
4 |
5 |
table |
我知道第一步是根据标签按数据框分组。然后我想取一个只有标签“椅子”、“椅子和桌子”、“椅子和桌子和抽屉”的行子集,并将其放入一个新的数据框(最后会有 3 个单独的数据框)。
如果我将数据转换为 numpy 数组并分离标签,是否可以这样做?
谢谢!
【问题讨论】:
标签:
python
pandas
dataframe
numpy
【解决方案1】:
IIUC,您可以像这样简单地选择 DataFrame 的所需行:
df1 = df[df["Label"]=="chair"]
df2 = df[df["Label"].isin(["chair", "table"])]
df3 = df[df["Label"].isin(["chair", "table", "drawer"])]
【解决方案2】:
您可以在此处使用带有布尔索引的字典,它应该可以动态解决它:
u = df['Label'].unique()
l = [u[:e+1] for e in range(len(u))]
d = {' & '.join(i):df[df['Label'].isin(i)] for i in l}
print(d['chair'],'\n------\n',d['chair & table'],'\n------\n',d['chair & table & drawer'])
A B C Label
0 3 2 3 chair
3 2 4 5 chair
6 3 2 3 chair
------
A B C Label
0 3 2 3 chair
1 2 4 5 table
2 3 2 3 table
3 2 4 5 chair
6 3 2 3 chair
7 2 4 5 table
------
A B C Label
0 3 2 3 chair
1 2 4 5 table
2 3 2 3 table
3 2 4 5 chair
4 3 2 3 drawer
5 2 4 5 drawer
6 3 2 3 chair
7 2 4 5 table