Pandas聚结多列,楠

2024-09-29 01:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用pandas coalesce4列。我试过这个:

final['join_key'] = final['book'].astype('str') + final['bdr'] + final['cusip'].fillna(final['isin']).fillna(final['Deal'].astype('str')).fillna(final['Id'])

当我使用它时,它返回:

+-------+--------+-------+------+------+------------+------------------+
| book  |  bdr   | cusip | isin | Deal |     Id     |     join_key     |
+-------+--------+-------+------+------+------------+------------------+
| 17236 | ETFROS |       |      |      | 8012398421 | 17236.0ETFROSnan |
+-------+--------+-------+------+------+------------+------------------+

字段Id未正确附加到我的join_key字段。你知道吗

任何帮助都将不胜感激,谢谢。你知道吗

更新

+------------+------+------+-----------+--------------+------+------------+----------------------------+
|  endOfDay  | book | bdr  |   cusip   |     isin     | Deal |     Id     |          join_key          |
+------------+------+------+-----------+--------------+------+------------+----------------------------+
| 31/10/2019 |   15 | ITOR | 371494AM7 | US371494AM77 |  161 | 8013210731 | 20191031|15|ITOR|371494AM7 |
| 31/10/2019 |   15 | ITOR |           |              |      | 8011898573 | 20191031|15|ITOR|          |
| 31/10/2019 |   15 | ITOR |           |              |      | 8011898742 | 20191031|15|ITOR|          |
| 31/10/2019 |   15 | ITOR |           |              |      | 8011899418 | 20191031|15|ITOR|          |
+------------+------+------+-----------+--------------+------+------------+----------------------------+

df['join_key'] = ("20191031|" + df['book'].astype('str') + "|" + df['bdr'] + "|" + df[['cusip', 'isin', 'Deal', 'id']].bfill(1)['cusip'].astype(str))

出于某种原因,此代码没有将Id作为键的一部分。你知道吗


Tags: keyidpandasdffinaljoinstrbook
2条回答

试试这个:

import pandas as pd
import numpy as np

# setup (ignore)   
final = pd.DataFrame({
    'book': [17236],
    'bdr': ['ETFROS'],
    'cusip': [np.nan],
    'isin': [np.nan],
    'Deal': [np.nan],
    'Id': ['8012398421'],
})

# answer
final['join_key'] = final['book'].astype('str') + final['bdr'] + final['cusip'].fillna(final['isin']).fillna(final['Deal']).fillna(final['Id']).astype('str')

输出

    book    bdr     cusip   isin    Deal    Id          join_key
0   17236   ETFROS  NaN     NaN     NaN     8012398421  17236ETFROS8012398421

cusip的最后一个链fillna太复杂了。你可以把它改成bfill

final['join_key'] = (final['book'].astype('str') + 
                     final['bdr'] + 
                     final[['cusip', 'isin', 'Deal', 'Id']].bfill(1)['cusip'].astype(str))

相关问题 更多 >