如何根据条件更新单元格值?
How to base on condition to update cell value?
各位,我是Python的绝对初学者,目前正在自学。
我遇到了一个问题,我希望我能找到有才华的人来教我如何解决这个问题。
我有两个不同的excel要比较...
Data1.xlsx Data2.xlsx
| Name | City | Reg Date | Gender | Check In | Check In Date | | Name | Reg Date |
|Alex | Hong Kong | 2021-06-30 | Male | Y | 2021-06-30 | |Annie | 2021-07-01 |
|Annie | Hong Kong | 2021-07-01 | Female | | | |Billy | 2021-07-02 |
|Bob | Taipei | 2021-06-28 | Male | Y | 2021-06-28 | |Cathrine | 2021-07-03 |
|Lucy | Tokyo | 2021-06-28 | Female | Y | 2021-06-28 | |David | 2021-07-04 |
|David | London | 2021-07-04 | Male | | | |Eric | 2021-07-04 |
|Kate | New York | 2021-07-03 | Female | | |
|Cathrine | London | 2021-07-03 | Female | | |
|Rose | Hong Kong | 2021-07-04 | Female | | |
使用 Name
& Reg Date
作为键合并
import openpyxl as xl
import pandas as pd
import numpy as np
dt1 = pd.read_excel('Data1.xlsx')
dt2 = pd.read_excel('Data2.xlsx')
df_merge = pd.merge(dt1, dt2[['Name', 'Reg Date']], on=['Name', 'Reg Date'], how='left', indicator=True)
Name City Reg Date Gender Check In Check In Date _merge
0 Alex Hong Kong 2021-06-30 Male Y 2021-06-30 left_only
1 Annie Hong Kong 2021-07-01 Female NaN NaN both
2 Bob Taipei 2021-06-28 Male Y 2021-06-28 left_only
3 Lucy Tokyo 2021-06-28 Female Y 2021-06-28 left_only
4 David London 2021-07-04 Male NaN NaN both
5 Kate New York 2021-07-03 Female NaN NaN left_only
6 Cathrine London 2021-07-03 Female NaN NaN both
7 Rose Hong Kong 2021-07-04 Female NaN NaN left_only
如何检查等于 both
来填充 Check In
是 Y
& 复制 Reg Date
到 Check In Date
?
for a in df_merge.iloc[:, [7]].values:
if a == 'both':
使用布尔索引和fillna
:
cols = ['Check In', 'Check In Date']
mask = df_merged['_merge'].eq('both')
df_merged.loc[mask, cols] = \
df_merged.loc[mask, cols].fillna({'Check In': 'Y',
'Check In Date': df_merged['Reg Date']})
输出:
>>> df_merged
Name City Reg Date Gender Check In Check In Date _merge
0 Alex Hong Kong 2021-06-30 Male Y 2021-06-30 left_only
1 Annie Hong Kong 2021-07-01 Female Y 2021-07-01 both
2 Bob Taipei 2021-06-28 Male Y 2021-06-28 left_only
3 Lucy Tokyo 2021-06-28 Female Y 2021-06-28 left_only
4 David London 2021-07-04 Male Y 2021-07-04 both
5 Kate New York 2021-07-03 Female NaN NaN left_only
6 Cathrine London 2021-07-03 Female Y 2021-07-03 both
7 Rose Hong Kong 2021-07-04 Female NaN NaN left_only
各位,我是Python的绝对初学者,目前正在自学。 我遇到了一个问题,我希望我能找到有才华的人来教我如何解决这个问题。
我有两个不同的excel要比较...
Data1.xlsx Data2.xlsx | Name | City | Reg Date | Gender | Check In | Check In Date | | Name | Reg Date | |Alex | Hong Kong | 2021-06-30 | Male | Y | 2021-06-30 | |Annie | 2021-07-01 | |Annie | Hong Kong | 2021-07-01 | Female | | | |Billy | 2021-07-02 | |Bob | Taipei | 2021-06-28 | Male | Y | 2021-06-28 | |Cathrine | 2021-07-03 | |Lucy | Tokyo | 2021-06-28 | Female | Y | 2021-06-28 | |David | 2021-07-04 | |David | London | 2021-07-04 | Male | | | |Eric | 2021-07-04 | |Kate | New York | 2021-07-03 | Female | | | |Cathrine | London | 2021-07-03 | Female | | | |Rose | Hong Kong | 2021-07-04 | Female | | |
使用
Name
&Reg Date
作为键合并import openpyxl as xl import pandas as pd import numpy as np dt1 = pd.read_excel('Data1.xlsx') dt2 = pd.read_excel('Data2.xlsx') df_merge = pd.merge(dt1, dt2[['Name', 'Reg Date']], on=['Name', 'Reg Date'], how='left', indicator=True) Name City Reg Date Gender Check In Check In Date _merge 0 Alex Hong Kong 2021-06-30 Male Y 2021-06-30 left_only 1 Annie Hong Kong 2021-07-01 Female NaN NaN both 2 Bob Taipei 2021-06-28 Male Y 2021-06-28 left_only 3 Lucy Tokyo 2021-06-28 Female Y 2021-06-28 left_only 4 David London 2021-07-04 Male NaN NaN both 5 Kate New York 2021-07-03 Female NaN NaN left_only 6 Cathrine London 2021-07-03 Female NaN NaN both 7 Rose Hong Kong 2021-07-04 Female NaN NaN left_only
如何检查等于
both
来填充Check In
是Y
& 复制Reg Date
到Check In Date
?for a in df_merge.iloc[:, [7]].values: if a == 'both':
使用布尔索引和fillna
:
cols = ['Check In', 'Check In Date']
mask = df_merged['_merge'].eq('both')
df_merged.loc[mask, cols] = \
df_merged.loc[mask, cols].fillna({'Check In': 'Y',
'Check In Date': df_merged['Reg Date']})
输出:
>>> df_merged
Name City Reg Date Gender Check In Check In Date _merge
0 Alex Hong Kong 2021-06-30 Male Y 2021-06-30 left_only
1 Annie Hong Kong 2021-07-01 Female Y 2021-07-01 both
2 Bob Taipei 2021-06-28 Male Y 2021-06-28 left_only
3 Lucy Tokyo 2021-06-28 Female Y 2021-06-28 left_only
4 David London 2021-07-04 Male Y 2021-07-04 both
5 Kate New York 2021-07-03 Female NaN NaN left_only
6 Cathrine London 2021-07-03 Female Y 2021-07-03 both
7 Rose Hong Kong 2021-07-04 Female NaN NaN left_only