我可能忽略了一个简单的数据问题,但是在合并数据帧时无法获得所需的结果。 如果列出的数据here中没有文档之一,则我希望键列中的所有值都与NaN值一起出现在合并结果中。
如果左侧或右侧均未出现组合键 表,联接表中的值将为NA
但是,我只获得在两个数据框中都存在的键值。我正在使用外部并且还尝试了左(左是在键列中具有更多值的数据框)。 当我尝试使用示例数据(针对此问题创建)时,它似乎可以工作!
import pandas as pd import numpy as np
df1 = pd.DataFrame({'A': np.random.randint(0,10, size=(10,)),
'Time': np.random.randint(0,10, size=(10,))}) df1 = df1.sort_values('Time')
masterTime = [None]*len(df1) for x in range(len(df1)):
masterTime[x] = x+1
df2 = pd.DataFrame({'Time': masterTime,
'B': np.random.randint(0,10,size=(10,))})
dfMerged = pd.merge(df1, df2,how='outer',on='Time')
print(df1)
print(df2)
print(dfMerged)
此行为符合预期:
A Time
5 3 0
8 2 0
9 5 0
1 8 2
7 5 4
6 7 5
3 3 6
4 7 6
2 4 7
0 5 9
Time B
0 1 1
1 2 8
2 3 9
3 4 1
4 5 5
5 6 0
6 7 9
7 8 6
8 9 1
9 10 6
A Time B
0 0.0 0 NaN
1 9.0 0 NaN
2 8.0 0 NaN
3 2.0 2 5.0
4 4.0 2 5.0
5 9.0 4 2.0
6 0.0 6 8.0
7 9.0 6 8.0
8 8.0 7 1.0
9 5.0 8 6.0
10 NaN 1 8.0
11 NaN 3 5.0
12 NaN 5 4.0
13 NaN 9 9.0
14 NaN 10 2.0
但是对于我的源数据,这将产生以下结果:
df1:
Time A C
0 0 80.332192 136.548522
1 3 100.825094 201.764747
2 5 83.776422 157.963083
3 7 96.326057 207.776248
4 7 98.632962 139.496500
5 8 102.935885 147.342966
6 9 99.895678 167.848140
7 10 77.258792 131.287188
8 10 79.845595 135.395080
9 11 97.838232 192.865211
10 12 78.505035 149.080378
df2
Time B
0 1 1000.12
1 2 1000.12
2 3 1000.12
3 4 1000.12
4 5 1000.12
5 6 1000.12
6 7 1000.12
7 8 1000.12
8 9 1000.12
9 10 1000.12
10 11 1000.12
11 12 1000.12
(两个数据帧都像这样继续)
将这些与how ='outer'和on ='Time'合并会给我输出:
Time A C B
0 0 80.332192 136.548522 NaN
1 3 100.825094 201.764747 1000.12
2 5 83.776422 157.963083 1000.12
3 7 96.326057 207.776248 1000.12
4 7 98.632962 139.496500 1000.12
5 8 102.935885 147.342966 1000.12
6 9 99.895678 167.848140 1000.12
7 10 77.258792 131.287188 1000.12
8 10 79.845595 135.395080 1000.12
9 11 97.838232 192.865211 1000.12
10 12 78.505035 149.080378 1000.12
您可以看到这些只是df1中的值。不管我尝试向左,向右,内部还是外部,它总是会给我这些(只是不同之处在于它是否会给我0值,具体取决于方法) 我期望像这样(与上面的示例输出一致)
Time A C B
0 0 80.332192 136.548522 NaN
1 1 NaN NaN 1000.12
2 2 NaN NaN 1000.12
3 3 100.825094 201.764747 1000.12
4 4 NaN NaN 1000.12
5 5 83.776422 157.963083 1000.12
6 6 NaN NaN 1000.12
7 7 96.326057 207.776248 1000.12
8 7 98.632962 139.496500 1000.12
9 8 102.935885 147.342966 1000.12
10 9 99.895678 167.848140 1000.12
11 10 77.258792 131.287188 1000.12
12 10 79.845595 135.395080 1000.12
13 11 97.838232 192.865211 1000.12
14 12 78.505035 149.080378 1000.12
两个数据帧中的键均为“时间”,因此也不是问题。 有人对这里发生的事情有任何线索吗?
答案 0 :(得分:0)
我觉得自己很愚蠢,但这与排序有关。一直以来,它都按预期工作,但是我无法正确地对“时间”上的合并数据帧进行排序,因此在打印合并数据帧时未显示初始帧中未包含的“时间”值行。 对打印中的合并帧进行排序显示了预期的输出
print(dfMerged.sort_values('Time'))