熊猫:如何在数据框中查找值?

时间:2016-11-16 18:53:16

标签: python pandas

我有两个数据框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}}

2 个答案:

答案 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的不同选项。