我有两个数据框df =
Days 0 2 4 5 7 8 10
0 2012-01-01 27 30 5 34 1 2 10
df1 =
Lat Lon ID
0 1.3678 103.9826 0
1 1.4166 103.8654 1
2 1.3399 103.8878 2
3 1.3455 103.6806 3
4 1.3764 103.8492 3
5 1.3337 103.7768 5
6 1.4439 103.7854 6
7 1.2500 103.8279 7
8 1.3302 103.7205 8
9 1.3134 103.9619 9
10 1.2799 103.8703 10
和df
。
df1
我想在df2 =
Lat Lon val ID
0 1.3678 103.9826 27 0
1 1.4166 103.8654 30 2
2 1.3399 103.8878 5 3
3 1.3455 103.6806 34 5
4 1.3764 103.8492 1 7
5 1.3337 103.7768 2 8
6 1.4439 103.7854 10 10
中找到for i in range(1, len(df.columns)):
c = l[i] ## name of the colum
z = np.int(c)
tmp1 = df1[df1.ID==z]
df2.Lat[i-1] = tmp1.Lat[tmp1.index[0]]
df2.Lon[i-1] = tmp1.Lon[tmp1.index[0]]
df2.val[i-1] = df[c][tmp.index[0]]
df2.ID[i-1] = c
列的值并返回:
{{1}}
这就是我正在做的事情
{{1}}
答案 0 :(得分:2)
或许,创建一个包含转置数据的dff
并将其合并到ID
In [56]: dff = pd.DataFrame({'ID': df.columns[1:].astype(int), 'V': df.values[0][1:]})
In [57]: dff
Out[57]:
ID V
0 0 27
1 2 30
2 4 5
3 5 34
4 7 1
5 8 2
6 10 10
In [58]: df1.merge(dff)
Out[58]:
Lat Lon ID V
0 1.3678 103.9826 0 27
1 1.3399 103.8878 2 30
2 1.3337 103.7768 5 34
3 1.2500 103.8279 7 1
4 1.3302 103.7205 8 2
5 1.2799 103.8703 10 10
答案 1 :(得分:0)
首先,您的结果数据框似乎不会出现在前两个数据框中。您似乎正在使用df
中的列标题合并到ID
中的df1
,但是您为ID = 3提供的值为5,而不是{&#39}。加起来。所有其他人都这样做,所以我认为这个例子中的错误。
其次,您几乎不应该使用像这样的循环索引构造在Pandas中工作。它非常容易出错,而且非常慢,并且可能以更有效的方式提供。我认为这是你的问题。
这是我使用的代码:
import pandas as pd
df = pd.DataFrame({0:[27], 2:[30], 4:[5], 7:[1], 8:[2], 10:[10]})
df1 = pd.DataFrame({'Lat':[1.3678,1.4166,1.3399,1.3455,1.3764,1.3337,1.4439,1.2500,1.3302,1.3134,1.2799],
'ID':[0,1,2,3,3,5,6,7,8,9,10]})
df2 = df1.merge(df.T.reset_index().rename(columns={'index':'ID', 0:'val'}), how='outer')
首先使用.T
转置第一个数据帧,然后将索引作为列拉出,所以它看起来像这样:
In [70]: df.T.reset_index()
Out[70]:
index 0
0 0 27
1 2 30
2 4 5
3 7 1
4 8 2
5 10 10
然后重命名'索引'到' ID'和0到' val',然后在ID
上合并以获得最终结果:
In [71]: df2
Out[71]:
ID Lat val
0 0.0 1.3678 27.0
1 1.0 1.4166 NaN
2 2.0 1.3399 30.0
3 3.0 1.3455 NaN
4 3.0 1.3764 NaN
5 5.0 1.3337 NaN
6 6.0 1.4439 NaN
7 7.0 1.2500 1.0
8 8.0 1.3302 2.0
9 9.0 1.3134 NaN
10 10.0 1.2799 10.0
11 4.0 NaN 5.0
我使用how='outer'
来强调您必须更好地优化标准的区域。 ID 3的双重发生会发生什么?或者不在另一边发生的价值?您可以看到how
here的不同选项。