我正在清理一些数据,原始数据集的条目为['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
答案 0 :(得分:1)
您可以依次使用wide_to_long
,bfill
和pivot
:
(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