【发布时间】:2019-09-18 05:26:10
【问题描述】:
我想计算我的列表中每个关键字在每行的给定数据框列中出现的数量总和。
d = {
'Column_1': ['mango pret Orange No manner', ' préts No scan '],
'Column_2': ['read priority No', 'This is a priority noir '],
'Column_3': ['No add', 'yep']
}
df = pd.DataFrame(data=d)
list_1 = ['Apple', 'Mango' ,'Orange', 'pr[éeêè]t[s]?']
list_2 = ['weather', 'r[ea]d' ,'p[wr]iority', 'noir?']
list_3 = ['n[eéè]d','snow[s]?', 'blanc?']
dict = {
"s1": ['Column_1', list_1],
"s2": ['Column_1', list_3],
"s3": ['Column_2', list_2],
"s4": ['Column_3', list_3],
"s5": ['Column_2','Column_3',list_1]
}
for elt in list(dict.keys()):
#s1 s2 s3 print(elt)
if len(dict[elt])<=2:
d = Counter(re.findall(r'|'.join(dict[elt][1]).lower(), str(df[dict[elt][0]].str.lower())))
print(d)
#df[elt] = d
sum(d.values())
elif len(dict[elt])>2:
aa = Counter(re.findall(r'|'.join(dict[elt][2]).lower(), str(df[dict[elt][0]].str.lower())))
bb = Counter(re.findall(r'|'.join(dict[elt][2]).lower(), str(df[dict[elt][1]].str.lower())))
b = sum(bb.values())
a = sum(aa.values())
d = a +b
df[elt] = d
我print(d) 的结果在下面
Counter({'mango': 1, 'pret': 1, 'orange': 1, 'préts': 1})
如何更改此代码以提供类似于下面的数据框 df2 的内容
d2 = {'s1': [3, 1], 's3':[2,1]}
df2 = pd.DataFrame(data=d2)
【问题讨论】:
-
假设
list_1 = ['no']。dict['s5']的输出应该是什么?d2['s5'] = [[1,1],[1,0]]? -
它是 [2, 0] 。因为它在 cloumn_2 的第一行中存在一次,在 column_3 (1+1 = 2) 中存在一次。而且不存在column_2和column_3的第二行所以0。
标签: python regex pandas for-loop