假设我有3个不同的pandas dataFrames
>>>> df2 = pd.DataFrame({'PERSID': [20016, 50048, 13478, 68493, 57483, 45623],
'Sex': ['F', 'M', 'F', 'F', 'M', 'M'],
'Var1': [3, *1*, 3, 3, 2, np.nan],
'Var2': [*3*, 3, np.nan, 3, 2, 0],
'Var3': [-0.25, 0, 4, np.nan, 0.14, 0.28]})
>>> df2.set_index('ID')
Sex Var1 Var2 Var3
PERSID
20016 F 3.0 3.0 -0.25
50048 M 1.0 3.0 0.00
13478 F 3.0 NaN 4.00
68493 F 3.0 3.0 NaN
57483 M 2.0 2.0 0.14
45623 M NaN 0.0 0.28
第二个DF基本上是DF1的更新版本,这意味着更多行条目以及其他列,并且可能在某些其他列中更改了值,例如
SUBJECT Var4 Var5 Var6
200 1640.345 345.0 -0.250000
6700 14236.430 1713.0 -0.050735
6702 1345.400 NaN 0.034450
1330__201805 345.750 335.0 0.140000
4786__201805 NaN 0.0 NaN
作为示例的最后一个dataFrame应该与以下内容完全不同:
ID Sex_x Var1_x Var2_x Var3 Var1_y Var2_y
20016 F 3.0 2.0 -0.25 NaN 3.0
50048 M 3.0 3.0 0.00 1.0 NaN
13478 F 3.0 NaN 4.00 NaN NaN
68493 F 3.0 3.0 NaN NaN NaN
57483 M 2.0 2.0 0.14 NaN NaN
45623 M NaN NaN 0.28 NaN 0.0
目标是将所有3个dataFrame合并为一个,包含所有非冗余信息。这意味着:
考虑只合并DF1和DF2,它应该看起来像这样:
df_combined = df_1.copy()
for ind, column in enumerate(df_2):
if not column in list(df_combined):
df_combined.insert(len(df_combined.columns), column,
value=pd.Series(np.nan),
allow_duplicates=False)
frame = [df_combined, df_2]
df_combined = pd.concat(frame)
然后应合并第3个DF,这将导致仅添加行和列。 其他DF中不存在的所有细胞应填充NaN
如果像name.x和name.y这样的相应列彼此相邻以确保可读性,那就太棒了。
我尝试了像pandas.DataFrame。(合并,连接和连接)之类的东西,尝试手工完成,但没有任何工作,因为它需要。
这是我如何添加列的示例,如果它们不存在:
TypeError: C:\Users\dlma1\Desktop\Nodejs Practice\znode-js-playlist\views\todo.ejs:17
15| <ul>
16| <% for(let i=0;i<todos.length;i++){ %>
>> 17| <li><%= todos[i].item %></li>
18| <% } %>
19| </ul>
20| </div>
Cannot read property 'item' of undefined
这可能已经不是一个好的解决方案了。
感谢您提供有关如何实现此功能的任何帮助!