【发布时间】:2022-01-19 22:15:29
【问题描述】:
您好,我是 python 和 pandas 数据帧的新手,我一直坚持以下问题:
我有两个不同的数据框:df1 有 ~130 行,df2 有 ~380 行
-
df1['Symbol_1']的值如“DASHUSDT”(例如)包含关键字“DASH” -
df2['Symbol_2']的值类似于 df2 中的“DASHBTC”(例如),其中包含关键字“DASH”
我想从 df1 中按关键字搜索 df2,并创建一个新的数据框(如下所示的 df3)。
- 请注意,df1 中的所有行将始终具有与 df2 匹配的关键字,“BTC/USDT”对除外。
- 为了让事情更清楚:Symbol_1(例如:DASHUSDT)总是以'USDT'结尾,'DASH'是关键字。 Symbol_2(例如:DASHBTC)始终以“BTC”结尾,“DASH”是关键字。
- 我正在为 USDT 货币对创建一个关注列表,并且我想轻松地从同一关注列表中检查 BTC 对。 BTC 为王,所有山寨币都有 BTC 对,DASH/BTC,ETH/BTC,LTC/BTC 等。但 BTC 不会有像 BTC/BTC 这样的 BTC 对,所以对于 'BTC/USDT' 行,第二个数据帧中不会有任何匹配的行,因此我们可以将其保留为空或将“Symbol_2”列替换为“0”,将“24H_Change_2”列替换为“0”
[df1]
Symbol_1 Price 24H_Change_1 Volume
BTCUSDT 42135.15 -1.565 200.125
DASHUSDT 139.87 10.0390 1.7400
ADAUSDT 1.23060 1.0700 1.1800
C98USDT 2.5328 0.4520 1.1900
1000SHIBUSDT 0.029233 6.589 2.4564
[df2]
Symbol_2 24H_Change_2
1000SHIBBTC 4.412
SNMBTC 5.1235
ADABTC 1.0700
XVGBTC 15.1240
C98BTC 0.4520
SALTBTC 7.149
EOSBTC 5.551
DASHBTC 11.258
我想要的输出数据框:(第一个选项)
Symbol_1 Price 24H_Change_1 Volume Symbol_2 24H_Change_2
BTCUSDT 42135.15 -1.565 200.125
DASHUSDT 139.87 10.0390 1.7400 DASHBTC 11.258
ADAUSDT 1.23060 1.0700 1.1800 ADABTC 1.0700
C98USDT 2.5328 0.4520 1.1900 C98BTC 0.4520
1000SHIBUSDT 0.029233 6.589 2.4564 1000SHIBBTC 4.412
我想要的输出数据框:(第二个选项)
如果第一个选项是不可能的或太麻烦或两个复杂的完成,我对第二个选项很好,我可以将“BTC/USDT”对从第一个数据帧中分离出来作为一个单一的数据帧供参考,然后添加用于山寨币的新数据帧(如下所示的第三个数据帧)。
Symbol Price 24H_Change Volume
BTCUSDT 42135.15 -1.565 200.125
Symbol_1 Price 24H_Change_1 Volume Symbol_2 24H_Change_2
DASHUSDT 139.87 10.0390 1.7400 DASHBTC 11.258
ADAUSDT 1.23060 1.0700 1.1800 ADABTC 1.0700
C98USDT 2.5328 0.4520 1.1900 C98BTC 0.4520
1000SHIBUSDT 0.029233 6.589 2.4564 1000SHIBBTC 4.412
【问题讨论】:
-
快速浏览一下pandas quickstart 和Pandas Merging 101。然后你就会认出这是变相的合并/加入。