擅长:python、mysql、java
<p>我要做的是:</p>
<ol>
<li><p>使用<a href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html" rel="nofollow noreferrer">DataFrame.apply</a>向仅包含域的数据帧添加新列。</p></li>
<li><p>使用<a href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html" rel="nofollow noreferrer">DataFrame.merge</a>(带<code>how='inner'</code>选项)合并域字段上的两个数据帧。</p></li>
</ol>
<p>如果循环只是在列或行上迭代,那么使用循环对数据帧执行操作有点脏,而且通常有一个DataFrame方法可以更干净地执行相同的操作。在</p>
<p>如果你愿意,我可以用例子来扩展。在</p>
<p><strong>编辑</strong>下面是这样的。请注意,我在域捕获中使用了相当糟糕的regex。在</p>
<pre><code>def domain_extract(row):
s = row['Links']
p = r'(?:(?:\w+)?(?::\/\/)(?:www\.)?)?([A-z0-9.]+)\/.*'
m = re.match(p, s)
if m is not None:
return m.group(1)
else:
return None
df['Domain'] = df.apply(domain_extract, axis=1)
dfo = pd.DataFrame({'Name': ['Atlanta Journal-Constitution', 'The Washington Post', 'The New York Times'], 'Domain': ['ajc.com', 'washingtonpost.com', 'nytimes.com']})
df.merge(dfo, on='Domain', how='inner')[['Links', 'Domain', 'Name']]
</code></pre>