问题描述
我有以下数据框:
if ($result->num_rows > 0) {
// output data of each row
echo "<center><table>";
echo "<tr>";
echo "<th>Legal Business Name</th>";
echo "<th>DBA Name</th>";
echo "<th>Business Address</th>";
echo "<th>Website Address</th>";
echo "<th>Business Government POC</th>";
echo "</tr>";
while($row = $result->fetch_assoc()) {
echo "<tr><td>" . $row["LEGAL_BUSINESS_NAME"]. "</td>";
echo "<td>" . $row["DBA_NAME"]. "</td>";
echo "<td>" . $row["PHYSICAL_ADDRESS_LINE_1"]. "<br>" . $row["PHYSICAL_ADDRESS_LINE_2"]. "<br>" . $row["PHYSICAL_ADDRESS_CITY"]. "," . $row["PHYSICAL_ADDRESS_PROVINCE_OR_STATE"]. " " . $row["PHYSICAL_ADDRESS_ZIP_POSTAL_CODE"]. "+" . $row["PHYSICAL_ADDRESS_ZIP_CODE_PLUS_4"]. " " . $row["PHYSICAL_ADDRESS_COUNTRY_CODE"]. "</td>";
echo "<td>" . $row["CORPORATE_URL"]. "</td>";
echo "<td>" . $row["GOVT_BUS_POC_FIRST_NAME"]. " " . $row["GOVT_BUS_POC_MIDDLE_INITIAL"]. " " . $row["GOVT_BUS_POC_LAST_NAME"]. "<br> P: ". $row["GOVT_BUS_POC_US_PHONE"]. "<br> E: ". $row["GOVT_BUS_POC_EMAIL"]. "</td>";
echo "</tr>";
}
echo "</table>";
我想获得一列“匹配”,该列将显示“ c1”和“ c2”中的值相同或不同的记录:
case c1 c2
1 x x
2 NaN y
3 x NaN
4 y x
5 NaN NaN
我根据另一个堆栈溢出问题尝试了以下方法:Comparing two columns and keeping NaNs 但是,我无法正确解决第4种情况和第5种情况。
case c1 c2 match
1 x x True
2 NaN y False
3 x NaN False
4 y x False
5 NaN NaN True
解决方法
将eq
与isna
一起使用:
df.c1.eq(df.c2)|df.iloc[:,1:].isna().all(1)
#or
df.c1.eq(df.c2)|df.loc[:,['c1','c2']].isna().all(1)
,
import pandas as pd
import numpy as np
df = pd.DataFrame({
'case': [1,2,3,4,5],'c1': ['x',np.nan,'x','y',np.nan],'c2': ['x',})
df['c3'] = df.apply(lambda row: True if str(row.c1) == str(row.c2) else False,axis=1)
print(df)
输出
case c1 c2 c3
0 1 x x True
1 2 NaN y False
2 3 x NaN False
3 4 y x False
4 5 NaN NaN True
,
将nuquine
与fillna
一起使用
import numpy as np
df.fillna(np.inf)[['c1','c2']].nunique(1) < 2
或nunique
和选项dropna=False
df[['c1','c2']].nunique(1,dropna=False) < 2
Out[13]:
0 True
1 False
2 False
3 False
4 True
dtype: bool