选择两列名称相同的熊猫列

时间:2019-09-23 16:11:06

标签: python pandas

我正在清理一些数据,原始数据集的条目为['Field1.1', 'Field2.1', 'Field1.2', 'Field2.2']。对于数据集,'Field1' XOR 'Field2'都将具有非空字符串。我想创建一个字段'Field.1',该字段将从'Field1.1' XOR 'Field2.1'中提取非空字符串并将其放在'Field.1'中。同样,我想对'Field1.2''Field2.2'作为'Field.2'进行此操作。

我不确定如何选择匹配的字段,即“ X.1”和“ Y.1”以及“ X.2”和“ Y.2”。


我的逻辑是,一旦我可以选择正确的对,就可以简单地使用concat语句添加它们,从而提取非空字符串以供以后使用。如果此逻辑不正确,或者有更好的方法不依赖于以这种方式提取非空字符串来连接它们,那么请告诉我。


如果逻辑合理,请说明在存在索引问题的情况下如何进行提取。


更清楚一点,我想去:

df = pd.DataFrame({'field1.1': ['string1',''], 'field2.1':['','string2'],
                   'field1.2': ['string3',''], 'field2.2':['','string4']})

df

Out[1]: 
  field1.1 field2.1 field1.2 field2.2
0  string1           string2         
1           string3           string4

收件人:

df2 = pd.DataFrame({'field.1': ['string1','string3'], 'field.2':['string2','string4']})

df2

Out[2]: 
   field.1  field.2
0  string1  string2
1  string3  string4

1 个答案:

答案 0 :(得分:1)

您可以依次使用wide_to_longbfillpivot

(pd.wide_to_long(df.where(df.ne('')).reset_index(), 
                 stubnames=['Field1','Field2'],
                 i='index', 
                 j='group', 
                 sep='.')
 .bfill(1)
 .reset_index()
 .pivot(values='Field1',index='index',columns='group')
)

样本数据:

df = pd.DataFrame([
    ['a','','b',''],
    ['c','','','d'],
    ['','e','','f'],
    ['','g','h','']],
    columns=['Field1.1', 'Field2.1', 'Field1.2', 'Field2.2'])

group  1  2
index      
0      a  b
1      c  d
2      e  f
3      g  h