sge*_*tim 2 python dataframe pandas
假设我有一个pd.DataFrame看起来像这样的:
id col1_a col1_b col2_a col2_b
1 x x 2 3
2 z d 4 5
3 y y 9 9
4 p p 8 1
Run Code Online (Sandbox Code Playgroud)
此数据框代表的是 2 个数据框 ( df_a, df_b) 逐列比较。
我正在尝试获取一个突出显示并查找包含这些差异的列的数据框:
id col1_a col1_b col2_a col2_b diff
1 x x 2 3 col2
2 z d 4 5 col1,col2
3 y y 9 9 None
4 p p 8 1 col2
Run Code Online (Sandbox Code Playgroud)
我怎样才能在不必双重遍历列和行的情况下实现这样的事情。
我知道我可以通过做类似的事情(未测试)来实现这一点:
for col_ptr1 in df.columns:
for col_ptr2 in df.columns:
for idx, row in df.iterrows():
if col_ptr1.strip('_a') == col_ptr2.strip('_b'):
blah blah blah...
Run Code Online (Sandbox Code Playgroud)
这个超级丑。我想知道是否有更多pandas风格的方法来解决这个问题。
选择包含的列子集col,然后split这些列名围绕分隔符_并提取split使用str访问器的第一个组件
现在,group在数据框col使用在上一步中提取前缀,AGGnunique沿axis=1计数unqiue值。如果不等于 1,则检查唯一值,然后使用在 diff 列中添加相应的列名dataframe.dot
c = df.filter(regex=r'_(a|b)$')
m = c.groupby(c.columns.str.split('_').str[0], axis=1).nunique().ne(1)
df['diff'] = m.dot(m.columns + ',').str[:-1]
Run Code Online (Sandbox Code Playgroud)
id col1_a col1_b col2_a col2_b diff
0 1 x x 2 3 col2
1 2 z d 4 5 col1,col2
2 3 y y 9 9
3 4 p p 8 1 col2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |