【问题标题】:get distinct columns dataframe获取不同的列数据框
【发布时间】:2019-10-22 18:28:21
【问题描述】:

您好,我怎样才能只处理 2 个数据帧中 val 不同的行。 请注意,我可以拥有 id1 或 id2 或两者兼有,如下所示。

d2 = {'id1': ['X22', 'X13',np.nan,'X02','X14'],'id2': ['Y1','Y2','Y3','Y4',np.nan],'VAL1':[1,0,2,3,0]}
F1 = pd.DataFrame(data=d2)
d2 = {'id1': ['X02', 'X13',np.nan,'X22','X14'],'id2': ['Y4','Y2','Y3','Y1','Y22'],'VAL2':[1,0,4,3,1]}
F2 = pd.DataFrame(data=d2)

预期输出

d2 = {'id1': ['X02',np.nan,'X22','X14'],'id2': ['Y4','Y3','Y1',np.nan],'VAL1':[3,2,1,0],'VAL2':[1,4,3,1]}

F3 = pd.DataFrame(data=d2)

【问题讨论】:

  • 您好,您的问题第一行好像少了一个字:how can i do to [?] only
  • @BertrandGazanion 得到

标签: python-3.x pandas dataframe outer-join distinct-values


【解决方案1】:

首先使用left_onright_on 参数将所有列合并,然后过滤掉both 行并通过stackunstack 重新整形来删除缺失值:

df=pd.merge(F1, F2, left_on=['id1','id2','VAL2'], 
                    right_on=['id1','id2','VAL1'], how="outer", indicator=True)

df=(df[df['_merge'] !='both']
        .set_index(['id1','id2'])
        .drop('_merge', 1)
        .stack()
        .unstack()
        .reset_index())

print (df)
   id1 id2 VAL2 VAL1
0  X02  Y4    3    1
1  X22  Y1    1    3

【讨论】:

  • 谢谢,但第一行出错** KeyError: 'VAL1'**
  • @Miss - 可能有必要将VAL1VAL2 交换
  • 我意识到我的数据可以包含 Null。原帖已编辑
  • @Miss - 你能创建新问题吗?
  • 不能因为必须等待
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多