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) 示例代码:
>> 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