我试图集成多个数据源,但我发现要简洁地组合我的列有点棘手。我有一个数据帧,看起来像这样:
df = pd.DataFrame([['Address Data','City data','State Data', 'Zip Data', np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan],
[ np.nan,np.nan,np.nan,np.nan,'Address Data','City data','State Data', 'Zip Data',np.nan,np.nan,np.nan,np.nan],
[ np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,'Address Data','City data','State Data', 'Zip Data']],
columns = ['Address1','City1','State1','Zip1','Address2','City2','State2','Zip2','Address3','City3','State3','Zip3'])
print df
Address1 City1 State1 Zip1 Address2 City2/
0 Address Data City Data State Data Zip Data NaN NaN
1 NaN NaN NaN NaN Address Data City Data
2 NaN NaN NaN NaN NaN NaN
State2 Zip2 Address3 City3 State3 Zip3
0 NaN NaN NaN NaN NaN NaN
1 State Data Zip Data NaN NaN NaN NaN
2 NaN NaN Address Data City Data State Data Zip Data
我试着结合成这样:
^{pr2}$我希望我可以用这样的行同时设置多个列:
df.loc[df['State1'].notnull(),['Address','city','state','State','Zip']] = df.loc[df['State1'].notnull(),['Address1','City1','State1','Zip1']].values
但是,.loc不允许同时创建多个列。任何关于如何组合数据的想法都将不胜感激!在
根据下面的解决方案进行编辑
这个解决方案的问题是,我的数据可能看起来更像这样:
df = pd.DataFrame([['Address Data','City data','State Data', 'Zip Data', 'Address Data','City data','State Data', 'Zip Data',np.nan,np.nan,np.nan,np.nan],
[ np.nan,np.nan,np.nan,np.nan,'Address Data','City data','State Data', 'Zip Data',np.nan,np.nan,np.nan,np.nan],
[ np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,'Address Data','City data','State Data', 'Zip Data']],
columns = ['Address1','City1','State1','Zip1','Address2','City2','State2','Zip2','Address3','City3','State3','Zip3'])
在这种情况下,下面的解决方案给了我4行,而我只需要原来的3行。我想说的是“如果第1部分有数据,则使用第1部分;否则,如果第2部分有数据,则使用第2部分;否则,如果第3部分有数据,则使用第3部分”。每一行都需要保持唯一性,因为我没有合并行的许多其他属性。谢谢!在
我认为解决方案完全不同,所以我决定创建新的答案:
编辑:我试着修改一下你的样本:
^{pr2}$IIUC您可以先通过
list
理解来选择列名,然后使用pd.lreshape
:编辑:
如果需要而不是删除具有
^{pr2}$NaN
值的行,请添加参数dropna=False
:另一个numpy解决方案,但数据可以很好地排序(在示例中是的,实际上可能不是):
这个怎么样?在
输出:
^{pr2}$说明:
相关问题 更多 >
编程相关推荐