【问题标题】:Join tables and only keep right ones, but keep amount of left ones加入表格,只保留右边的,但保留左边的数量
【发布时间】:2021-11-21 15:33:23
【问题描述】:

我有两张桌子:

df1:

index   Address                                     type    amount   Epoch  ln of amount
0       0x88aDa02f6fCE2F1A833ad9B4999D62a7e3b70367  outflow 250000.0    1   12.429216
1       0x88aDa02f6fCE2F1A833ad9B4999D62a7e3b70367  outflow 250000.0    2   12.429216
2       0xhj2gf34jhl23h23ljhn45b1836hfñlsxsdkjv389  outflow 250000.0    1   12.429216
3       0xhj2gf34jhl23h23ljhn45b1836hfñlsxsdkjv389  outflow 33333.0     2   10.414303
4       0xhj2gf34jhl23h23ljhn45b1836hfñlsxsdkjv389  outflow 33333.0     3   10.414303

和df2:

Index   Other Addresses                
0       0xhj2gf34jhl23h23ljhn45b1836hfñlsxsdkjv389

我想创建一个仅包含来自 df2 的地址(以及所有其他相应列)的新表,但行数需要是左侧的行数。

基本上,我正在确定 df1 中存在哪些来自 df2 的地址,并且只保留那些地址,以及来自其他列的所有信息。

在我的示例中,结果表如下所示:

index   Address                                     type    amount   Epoch  ln of amount
0       0xhj2gf34jhl23h23ljhn45b1836hfñlsxsdkjv389  outflow 250000.0    1   12.429216
1       0xhj2gf34jhl23h23ljhn45b1836hfñlsxsdkjv389  outflow 33333.0     2   10.414303
2       0xhj2gf34jhl23h23ljhn45b1836hfñlsxsdkjv389  outflow 33333.0     3   10.414303

【问题讨论】:

  • 看看pd.Series.isin
  • 如果值在整个表中,但不单独匹配行,只给我一个布尔值。
  • Boolean indexingpandas 的最基本用法。
  • 我认为亨利的意思是 df3 = df1[df1['Address'].isin(df2['Other Addresses'])]

标签: python pandas dataframe join merge


【解决方案1】:

您可以按照 cmets 中的建议使用 pandas.Series.isin

df1[df1['Address'].isin(df2['Other Addresses])

例子:

df1=pd.DataFrame.from_dict({'col1':[1,2,3],'col2':['x','y','z']})

df1是:

   col1 col2
0     1    x
1     2    y
2     3    z

也创建df2

df2=pd.DataFrame.from_dict({'col1_other':[1,7]})

即:

   col1
0     1
1     7

df1[df1['col1'].isin(df2['col1_other'])] 然后变成:

   col1 col2
0     1    x

【讨论】:

  • 谢谢,我缺少的是外部 df1[[]]。
猜你喜欢
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多