【问题标题】:Extract data based the condition using python使用python根据条件提取数据
【发布时间】: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 上的这个问题可能会有所帮助。

标签: python pandas dataframe


【解决方案1】:

你可以试试这个:

import pandas as pd
d = {'col1': [1, 2], 'col2': [3, 4], 'col3': [3, 4]}
df = pd.DataFrame(data=d)
print(df)
print(df[(df['col1']==1) & (df['col2']==3)])

结果:

----------- 或 --------

尽量用pandas函数where(link to pandas.where tuto),用函数比用循环好

【讨论】:

    【解决方案2】:
    # Importing Libraries
    import pandas as pd
    
    # Importing dataframe
    df = pd.read_csv('mydata.csv')
    
    
    # Col A Value input as int
    first_input = int(input('Enter Col A Value'))
    
    # Col B value input as string
    second_input = str(input('Enter Col B Value'))
    
    # checking both column values with == sign 
    df[(df['Col_A'] == first_input) & (df['Col_B']== second_input)]
    

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 2021-11-27
      • 1970-01-01
      • 2018-09-25
      • 2017-02-12
      相关资源
      最近更新 更多