Python Pandas使用多个条件进行筛选,并忽略包含子字符串重复项的条目
我有一个数据框,它来自一个加密交易所的大量市场行情表。 该名单包括所有组合,但我只需要股票是对美元stablecoins 原始数据帧的前15个条目Python Pandas使用多个条件进行筛选,并忽略包含子字符串重复项的条目,python,pandas,Python,Pandas,我有一个数据框,它来自一个加密交易所的大量市场行情表。 该名单包括所有组合,但我只需要股票是对美元stablecoins 原始数据帧的前15个条目 Asset Price 0 1INCHBTC 0.00009650 1 1INCHBUSD 5.74340000 2 1INCHUSDT 5.74050000 3 AAVEBKRW 164167.00000000 4 AA
Asset Price
0 1INCHBTC 0.00009650
1 1INCHBUSD 5.74340000
2 1INCHUSDT 5.74050000
3 AAVEBKRW 164167.00000000
4 AAVEBNB 0.77600000
5 AAVEBTC 0.00615200
6 AAVEBUSD 365.00200000
7 AAVEDOWNUSDT 2.02505200
8 AAVEETH 0.17212000
9 AAVEUPUSDT 81.89500000
10 AAVEUSDT 365.57600000
11 ACMBTC 0.00018420
12 ACMBUSD 10.91700000
13 ACMUSDT 10.89500000
14 ADAAUD 1.59600000
Asset Price
0 1INCHBUSD 5.74340000
1 1INCHUSDT 5.74050000
2 AAVEBUSD 365.00200000
3 AAVEDOWNUSDT 2.02505200
4 AAVEUPUSDT 81.89500000
5 AAVEUSDT 365.57600000
6 ACMBUSD 10.91700000
7 ACMUSDT 10.89500000
8 ADABUSD 1.21439000
9 ADADOWNUSDT 3.46482700
10 ADATUSD 1.21284000
11 ADAUPUSDT 76.12900000
12 ADAUSDT 1.21394000
13 AERGOBUSD 0.43012000
14 AIONBUSD 0.07210000
现在,有很多美元稳定币,但不是每个股票都有一对一对。
所以我使用了最流行的方法,以确保每个资产至少有一个匹配项
df = df.loc[(df.Asset.str[-3:] == 'DAI')|
(df.Asset.str[-4:] == 'USDT')|
(df.Asset.str[-4:] == 'BUSD')|
(df.Asset.str[-4:] == 'TUSD')]
新但“混乱”数据帧的前15个条目
Asset Price
0 1INCHBTC 0.00009650
1 1INCHBUSD 5.74340000
2 1INCHUSDT 5.74050000
3 AAVEBKRW 164167.00000000
4 AAVEBNB 0.77600000
5 AAVEBTC 0.00615200
6 AAVEBUSD 365.00200000
7 AAVEDOWNUSDT 2.02505200
8 AAVEETH 0.17212000
9 AAVEUPUSDT 81.89500000
10 AAVEUSDT 365.57600000
11 ACMBTC 0.00018420
12 ACMBUSD 10.91700000
13 ACMUSDT 10.89500000
14 ADAAUD 1.59600000
Asset Price
0 1INCHBUSD 5.74340000
1 1INCHUSDT 5.74050000
2 AAVEBUSD 365.00200000
3 AAVEDOWNUSDT 2.02505200
4 AAVEUPUSDT 81.89500000
5 AAVEUSDT 365.57600000
6 ACMBUSD 10.91700000
7 ACMUSDT 10.89500000
8 ADABUSD 1.21439000
9 ADADOWNUSDT 3.46482700
10 ADATUSD 1.21284000
11 ADAUPUSDT 76.12900000
12 ADAUSDT 1.21394000
13 AERGOBUSD 0.43012000
14 AIONBUSD 0.07210000
如何筛选/合并此数据帧中的条目,以便删除重复项?
我还需要在最后删除子字符串,所以我只剩下资产和美元价格
应该是这样的
Asset Price
0 1INCH 5.74340000
2 AAVE 365.00200000
3 AAVEDOWN 2.02505200
4 AAVEUP 81.89500000
6 ACM 10.91700000
8 ADA 1.21439000
9 ADADOWN 3.46482700
11 ADAUP 76.12900000
13 AERGO 0.43012000
14 AION 0.07210000
这是一个投资组合跟踪。
另外,如果没有中间步骤,还有更好的方法,我洗耳恭听。根据您的预期输出,您希望删除重复项,但首先保留项:
df.Asset = df.Asset.str.replace(r"(DAI|USDT|BUSD|TUSD)$", "")
df = df.drop_duplicates(subset="Asset", keep="first")
print(df)
印刷品:
资产价格
0 1英寸5.743400
2 AAVE 365.002000
3 AAVEDOWN 2.025502
4 AAVEUP 81.895000
6 ACM 10.917000
8 ADA 1.214390
9.3.464827
11.增加76129000
13阿尔戈0.430120
14 AION 0.072100
编辑:分组并平均:
df.Asset = df.Asset.str.replace(r"(DAI|USDT|BUSD|TUSD)$", "")
df = df.groupby("Asset")["Price"].mean().reset_index()
print(df)
印刷品:
资产价格
0 1英寸5.741950
1 AAVE 365.289000
2 AAVEDOWN 2.025502
3 AAVEUP 81.895000
4 ACM 10.906000
5 ADA 1.213723
6.3.464827
7.增加76129000
8阿尔戈0.430120
9 AION 0.072100
就这么做吧
con1 = df.Asset.str[-3:] == 'DAI'
con2 = df.Asset.str[-4:] == 'USDT'
con3 = df.Asset.str[-4:] == 'BUSD'
con4 = df.Asset.str[-4:] == 'TUSD'
df['new'] = np.select(['con1','con2','con3','con4'],
['DAI','USDT','BUSD','TUSD'])
out = df[con1 | con2 | con3 | con4].groupby('new').head(1)
或
在删除复制品时,您如何决定保留哪个
价格
?就像1INCH
保持BUSD
超过USDT
对于这个用例来说并不重要,因为它是一个投资组合跟踪器,而且价格彼此非常接近……但是如果在它们之间取平均值,会更准确,但同样不需要。顺便问一下,有没有可能将它们平均化,而不是只保留第一个?虽然不需要它,但它更准确地表示了价格。@MegaDutcher请参见我的编辑。