【发布时间】:2022-01-05 23:59:54
【问题描述】:
我有以下数据框(df):
| Col_A | Col_B | Col_C |
|---|---|---|
| 123 | A | 1Q |
| 124 | B | L1 |
| 125 | B | QW |
| 126 | A | E2 |
如果用户选择特定列和值,则整行应保存为新数据框。例如,如果用户选择 Col_A 123,则输出应如下:
| Col_A | Col_B | Col_C |
|---|---|---|
| 123 | A | 1Q |
如果用户选择 Col_B: B 和 Col_A: 125,那么输出应该如下:
| Col_A | Col_B | Col_C |
|---|---|---|
| 125 | B | QW |
如果用户选择 Col_B: B 那么输出应该如下:
| Col_A | Col_B | Col_C |
|---|---|---|
| 124 | B | L1 |
| 125 | B | QW |
我该怎么做?
到目前为止我尝试了什么?
import pandas as pd
import numpy as np
df= pd.read_csv('Table.csv')
print('Enter the value as 99 if the Col_A or Col_B is not known')
Col_A_value= (input(str("Enter tag of your interest separated by ',': ")).split(","))
Col_B_value= (input(str("Enter iris_image_id of your interest separated by ',': ")).split(","))
input_table = []
for i,j in itertools.product(Col_A_value, Col_B_value):
if len(i) > 0 and len(j)==0:
input_table.append(df[df['Col_A'] == i])
elif i != '99' and len(j)> 0:
input_table.append(df[df['Col_A'] == i])
如果指定了 Col_A 和 Col_B,上述脚本不会提取特定数据。如果我指定 Col_A = 124 和 Col_B = B 它会导致 col_B 中的所有内容。
期望的输出:
| Col_A | Col_B | Col_C |
|---|---|---|
| 124 | B | L1 |
【问题讨论】:
-
您能否澄清一下我是否正确地遵循了这一点?您嵌套循环两个用户列表,但检查 a 是否有值并且 b 是否为空以仅检查 a。否则,如果 a 已知并且输入 b 的值,则如果 a 匹配,则保存行。对我来说这个逻辑真的很奇怪,为什么你从不检查B的值,99的情况在哪里处理。我个人将其作为获取 A 值,获取 b 值,检查是否为 99 或为空所以忽略,否则过滤到追加。
-
好吧,您在“if”和“elif”调用中都引用了“Col_A”。可能需要将第二个“Col_A”更改为“Col_B”。
-
panda data frame filters 上的这个问题可能会有所帮助。