Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何选择具有特定值的列来迭代数据帧中的所有行?_Python_Pandas_Loops_Dataframe - Fatal编程技术网

Python 如何选择具有特定值的列来迭代数据帧中的所有行?

Python 如何选择具有特定值的列来迭代数据帧中的所有行?,python,pandas,loops,dataframe,Python,Pandas,Loops,Dataframe,我找到了这个 但我无法从用户输入中找出如何在迭代中做到这一点 no_to_search = input() with open('jen.csv', 'rt') as f: reader = csv.reader(f, delimiter=',') for row in reader: if no_to_search==row df=pd.read_csv('jen.csv') for col in df.columns:

我找到了这个 但我无法从用户输入中找出如何在迭代中做到这一点

no_to_search = input()
with open('jen.csv', 'rt') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        if no_to_search==row
        df=pd.read_csv('jen.csv')
        for col in df.columns:
            if (df[col] == 1).any():
                print(col)
[通过此链接参考图片]


我想检索值为1的列名以进行输入行匹配。

这里有一种更有效的方法。更改代码以适合您的问题。向lambda添加另一个条件

df.apply(lambda x:print(x.index[(x['phone no']==号码)和(x.isin([1])。值),axis=1)

如果要向数据框中添加列,请执行以下操作:

df['cols']=df.apply(λx:print(x.index[(x['phone no']==number)和(x.isin([1])值),axis=1)

我相信有一个非常有效的方法可以做到这一点。这应该是可行的。如果不行,请告诉我

范围内的i(len(df)):
如果df.columns[(df==1.iloc[i]].notna():

打印(df.columns[(df==1.iloc[i]].values)

好的,我想我终于完全理解了您的问题。 如果我正确理解了你的问题

  • 您希望检索特定行的值与您的条件匹配的列(值=1) 示例代码:
示例数据位于名为“tmp.csv”的cvs文件中,与您的示例完全相同。 您需要列的名称,其中电话号码为7602102000,值为1:

>> df = pd.read_csv("tmp.csv", index_col=0)
>> no = 7602102000  # phone number inputed by your users
>> col_names = df.columns[(df.loc[df.index == no].values==1)[0]]
>> col_names
Index(['car_db', 'van_db'], dtype='object')
>> df[col_names]
            car_db  van_db
7602102000  1       1
7602201132  0       0
7622315645  1       0

这将打印满足条件的所有列。

是否有要检索的列名的完整列表?如果是:导入熊猫作为pd df=pd.read\u csv(文件名,usecols=list\u of\u col\u names)对不起,我想我误解了你的问题。你能举例说明你想要什么,例如数据的例子,以及你想提取什么吗?@ABotros你能跟进一下吗?我已经用数据的样本图像更新了帖子,我需要检索与输入数对应的值为1的列名。你想迭代所有行和列吗获取包含1的所有列名,或在整个数据帧中查找包含该值的所有列?谢谢..但这将显示匹配条件下整行的列名..我如何才能仅显示我输入的特定行号的列名?
df.columns[(df==1).iloc[row\u number]].values
User input我的意思是…有四列,即('phone no'、'db1'、'db2'、'db3')…我想让用户输入'phone no'作为外部输入,我想在数据帧中将其与'phone no'匹配,并返回列名称,其中1作为值…希望您现在就得到它。
df.apply(lambda x:print(x.index[(x['phone no'==number)&(x.isin([1])].values),axis=1)
它为其他行打印空数组,并为该行打印所需的输出。我不能只获取所需的数组吗?共有四列,即('phone no','db1','db2','db3'))…我想让用户输入'phone no'作为外部输入,我想在dataframe中将其与'phone no'匹配,并返回列名称,其中1作为特定记录的值…我正在获取匹配输出的索引..如何从匹配索引中获取列的值?啊,好的,那么您希望整个列的条件是否满足条件?只需使用df[col_name]调用数据帧。这将返回满足条件的所有列(带值)。
>> df = pd.read_csv("tmp.csv", index_col=0)
>> no = 7602102000  # phone number inputed by your users
>> col_names = df.columns[(df.loc[df.index == no].values==1)[0]]
>> col_names
Index(['car_db', 'van_db'], dtype='object')
>> df[col_names]
            car_db  van_db
7602102000  1       1
7602201132  0       0
7622315645  1       0