【发布时间】:2022-01-02 12:00:11
【问题描述】:
我有一个交易数据框:
pd.DataFrame({'Date(UTC)': {0: Timestamp('2020-10-12 03:31:00'),
1: Timestamp('2020-10-12 03:31:00'),
2: Timestamp('2020-10-12 03:37:00'),
3: Timestamp('2020-10-12 10:47:00'),
4: Timestamp('2020-12-12 09:06:00')},
'Pair': {0: 'AUDUSDT',
1: 'AUDUSDT',
2: 'AUDUSDT',
3: 'ETHUSDT',
4: 'AUDUSDT'},
'Side': {0: 'SELL', 1: 'SELL', 2: 'SELL', 3: 'BUY', 4: 'SELL'},
'Price': {0: '0.74201', 1: '0.742', 2: '0.74217', 3: '556.55', 4: '0.74831'},
'Executed': {0: '23.1000000000AUD',
1: '51.3000000000AUD',
2: '25.6000000000AUD',
3: '0.1331900000ETH',
4: '37.5000000000AUD'},
'Amount': {0: '17.14043100USDT',
1: '38.06460000USDT',
2: '18.99955200USDT',
3: '74.12689450USDT',
4: '28.06162500USDT'},
'Fee': {0: '0.0171404300USDT',
1: '0.0380646000USDT',
2: '0.0189995500USDT',
3: '0.0001331900ETH',
4: '0.0280616300USDT'},
'asset': {0: nan, 1: nan, 2: nan, 3: nan, 4: nan},
'asset_2': {0: nan, 1: nan, 2: nan, 3: nan, 4: nan}})
我还有一个单独的代码列表:
tickers = ["AUD","USDT","ETH","BNB","TWT","GRT","OXT","ADA","BTC","XRP","MATIC","NANO","SHIB","TLM","LINK","XLM",
"THETA","SOL","VET","DOT","KSM","ALGO","INJ","REN","TFUEL","BUSD","LRC","CKB","1INCH"]
我正在尝试识别成对中的单个代码,以便将它们附加到各自的列(资产和资产_2)
我已经编写了一些成功完成此操作的代码:
# iterate over dataframe with list of tickers and append appropriate
for i, pair in enumerate(trades["Pair"]):
for ticker in tickers:
if ticker in pair and pair.index(ticker) == 0:
trades["asset"][i] = ticker
elif ticker in pair and pair.index(ticker) != 0:
trades["asset_2"][i] = ticker
我的问题:这是执行此操作的最有效方法,还是更好的方法?虽然我很高兴它奏效了,但我不禁觉得这是一个笨拙的解决方案。
此外,在运行时,我会收到来自 Jupyter 的警告,但我不太明白:
/var/folders/yh/t_qzlr053q98srnwz3n8mlj40000gn/T/ipykernel_7535/4228300930.py:5: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
trades["asset"][i] = ticker
/opt/homebrew/lib/python3.9/site-packages/pandas/core/indexing.py:1732: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
self._setitem_single_block(indexer, value, name)
/var/folders/yh/t_qzlr053q98srnwz3n8mlj40000gn/T/ipykernel_7535/4228300930.py:7: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
trades["asset_2"][i] = ticker
【问题讨论】:
标签: python pandas dataframe iteration