python pandas多条件匹配的问题
python中有两个df,格式见图。我希望用df1匹配df2。遍历df1的行,再遍历df2的行。
如果df1的地址同时包含df2的“镇”、“行政村名称”、“自然村名称”,则将df2的3列添加到df1后面。
不知道怎么实现?
import pandas as pd
df_1 = pd.read_csv("退单地址表.csv", low_memory=False)
df_2 = pd.read_csv("精简自然村.csv", low_memory=False)
for index, row in df_1.iterrows():
print(index, row, row)
用and同时存在 就执行
a='123'
if '1' in a and '2' in a:
就执行 用pandas的MASK方法取出判断条件为true索引新建个df1,再把df2里对应索引的行抽出,这俩合并应该就行 我现在写成这样,但实在是太慢了,由于实际数据行数多达过万条,每条耗时需要 1-2秒,太慢了。
import pandas as pd
df_chargeback = pd.read_csv("t.csv", low_memory=False)
df_village = pd.read_csv("精简自然村.csv", low_memory=False)
df = pd.DataFrame(
columns=['地址', '退单数', '区县', '镇', '行政村名称', '自然村名称', '自然村全称', '是否村委办公点所在自然村', '区域', '网格', '看管装维', '装维手机号', '是否已覆盖',
'备注'])
for index, row in df_chargeback.iterrows():
print(index, row)
for rows in df_village.iterrows():
if rows in row and rows in row and rows in row:
df = df.append(
{'地址': row, '退单数': row, '区县': rows, '镇': rows, '行政村名称': rows,
'自然村名称': rows,
'自然村全称': rows, '是否村委办公点所在自然村': rows, '区域': rows, '网格': rows,
'看管装维': rows,
'装维手机号': rows, '是否已覆盖': rows, '备注': rows}, ignore_index=True)
print(df) 这个用子字符串去匹配查询字符串就行吧,三个子字符串都查询有就添加 不能把数据源贴出来吗? 用merge应该可以实现
import pandas as pd
df1 = pd.read_excel("数据1.xlsx")
df2 = pd.read_excel("数据2.xlsx")
print(df1)
print(df2)
dics = dict()
df1.iloc[:,0].map(lambda x: df2.iloc[:,0:3].apply((lambda y: dics.update({x:list(y)}) if all(z in x for z in y ) else None),axis = 1))
df3 = pd.DataFrame(dics).T.rename(columns={0:"镇",1:"行政村名称",2:"自然村名称"}).reset_index()
df1 = df1.merge(df3,left_on ='地址',right_on ='index').drop('index',axis=1)
print(df1) 本帖最后由 cszcszv163 于 2021-6-23 00:12 编辑
cszcszv163 发表于 2021-6-23 00:00
import pandas as pd
df1 = pd.read_excel("数据1.xlsx")
df2 = pd.read_e ...
另外有一点,df1最好处理一下重复项,df1.drop_duplicates(['地址'])
import pandas as pd
data = [{'地址': '茂名市电白区电城镇Y881乡道麻茂村委会麻茂村', '退单数': 19}, {'地址': '茂名市电白区电城镇博贺镇Y881乡道博贺村委会旧村村', '退单数': 12}]
data2 = [{'镇':'博贺','行政村名称':'博贺','自然村名称':'麻茂村'},{'镇':'博贺','行政村名称':'博贺','自然村名称':'旧村'}]
df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data2)
df1.loc[:,'自然村名称'] = df1.loc[:,'地址'].str.extract('村委会(.*村)')
df1.replace('村村','村',regex=True, inplace=True)
pd.merge(df1,df2,on='自然村名称')
页:
[1]
2