【问题标题】:Extract a dataframe from two dataframes matching the same values for a column?从与列的相同值匹配的两个数据框中提取数据框?
【发布时间】:2014-09-04 19:41:31
【问题描述】:

我有两个不同长度的数据帧。我想提取两个数据帧的“key1”值相同的数据。

In [6]: data1['key1'][5:10]
Out[6]: 
5    3701061.280649
6    3702854.401078
7    3706447.681452
8    3710048.323744
9    3713648.507167
Name: key1, dtype: float64

In [7]: data2['key1'][10:15]
Out[7]: 
10    3735249.951436
11    3738850.242555
12    3742450.472855
13    3746051.017456
14    3749651.185752
Name: key1, dtype: float64

我基本上想从每个 data1 和 data2 中得到两个数据帧,所以我可以绘制出 'key2'(y 轴)与 'key1'(x 轴)的差异

我怎样才能做到这一点?

【问题讨论】:

  • 所以你想要data1[data.key1 == data2.key1] 之类的东西,反之亦然?
  • 是的,但我的 len(data1) 和 len(data2) 不一样。
  • OK更新了我的答案,你可以使用isin过滤掉df行,我添加了虚拟数据来说明
  • 谢谢!像魅力一样工作。

标签: python pandas


【解决方案1】:

您可以使用isin,这将过滤掉其他df的列值中的列值,然后反过来重复:

In [4]:

df = pd.DataFrame({'a':arange(10), 'b':randn(10)})
df1 = pd.DataFrame({'a':arange(2,12), 'b':randn(10)})
print(df)
print(df1)
   a         b
0  0 -0.255545
1  1 -1.550302
2  2 -0.825056
3  3  1.475839
4  4  0.059035
5  5  2.295766
6  6  1.604147
7  7 -1.877267
8  8 -0.462598
9  9 -1.347194
    a         b
0   2 -1.462567
1   3 -0.277680
2   4 -0.461539
3   5  1.094466
4   6 -1.086069
5   7  0.249207
6   8  2.613443
7   9  1.036450
8  10 -0.562149
9  11 -0.679488
In [6]:

df[df.a.isin(df1.a)]
Out[6]:
   a         b
2  2 -0.825056
3  3  1.475839
4  4  0.059035
5  5  2.295766
6  6  1.604147
7  7 -1.877267
8  8 -0.462598
9  9 -1.347194
In [7]:

df1[df1.a.isin(df.a)]
Out[7]:
   a         b
0  2 -1.462567
1  3 -0.277680
2  4 -0.461539
3  5  1.094466
4  6 -1.086069
5  7  0.249207
6  8  2.613443
7  9  1.036450

【讨论】:

  • 其他列具有相似的命名“键”,因此我实际上想维护两个单独的数据框,以便绘制差异。
猜你喜欢
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 2021-04-28
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
相关资源
最近更新 更多