pandas全表查询,根据条件返回。记录一次爬坑过程。

关于pandas的查询,深深的掉了一个大坑。
以此来记录一下

  1. 不知道元素在那一列,哪一行,先上一个坑。
t1 =time.clock()
for id in ids:#id为需要查找的元素
    for indexs in df1.index:#循环行
        for  i in range(len(df1.loc[indexs].values)):循环行内元素
            if(df1.loc[indexs].values[i] ==id):
            	print(indexs,i)#打印元素位置
                print(df1.loc[indexs].values[i])
print(time.clock()-t1) 

来看看时间。很无语,百度的一种方法,当时比较急,没有细想
pandas全表查询,根据条件返回。记录一次爬坑过程。_第1张图片

  1. 自己优化后,其实不要返回元素具体位置,只需要定位到某一行即可。
t1 =time.clock()
for index in df1.index:
    for id in ids:
        if id in list(df1.iloc[index]):
            print('ok')
#             print(list(df1.iloc[index]))
print(time.clock()-t1)

来看看时间。。。很无语,这个坑啊,哎。

pandas全表查询,根据条件返回。记录一次爬坑过程。_第2张图片

  1. 另外还有一种方法
t1 =time.clock()
for id in ids:
    for index in df1.index:
        if id in list(df1.iloc[index]):
            print('ok')
#             print(list(df1.iloc[index]))
print(time.clock()-t1)

pandas全表查询,根据条件返回。记录一次爬坑过程。_第3张图片
记录到这里,时刻提醒自己,一定要先想,在写。
pandas 分组统计 并返回源dataFrame

df['counts'] = df.groupby(['value']).transform(len)#统计单列频次,并标记在源dataFrame

pandas apply函数 和map函数简单标记某一列元素出现的次数

count = df.groupby(['流水号'])['流水号'].count()#分组统计该列元素的频次,将返回一个series
#定义作用于每一个元素的函数
def f(x):
    return count[x]
#两种写法,python自带的高阶函数map写法,以及pandas自带的apply 应用于列的函数写法,结果相同
df['count'] = df['流水号'].apply(f)
df['count'] = df['流水号'].map(f)

                                            ----------记录一个菜鸟的学习历程。

你可能感兴趣的:(python3,pandas,python,pandas查询)