Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫、fillna/b填充至concat和聚结场_Python_Pandas - Fatal编程技术网

Python 熊猫、fillna/b填充至concat和聚结场

Python 熊猫、fillna/b填充至concat和聚结场,python,pandas,Python,Pandas,我试图在join_键中执行以下逻辑。 date+book+bdr+COALECSE(cusip、isin、deal、id) 我正在尝试使用: df['join_key'] = ("20191031|" + df['book'].astype('str') + "|" + df['bdr'] + "|" + df[['cusip', 'isin', 'Deal', 'Id']].bfill(1)['cusip'].astype(str)) 还尝试: df['position_join_key']

我试图在join_键中执行以下逻辑。
date+book+bdr+COALECSE(cusip、isin、deal、id)

我正在尝试使用:

df['join_key'] = ("20191031|" + df['book'].astype('str') + "|" + df['bdr'] + "|" + df[['cusip', 'isin', 'Deal', 'Id']].bfill(1)['cusip'].astype(str))
还尝试:

df['position_join_key'] = "20191031|" + df['book'].astype('str') + "|" + df['bdr'] + "|" + df['cusip'].fillna(df['isin']).fillna(df['Deal']).fillna(df['Id']).astype('str') 
由于某些原因,此代码没有将
Id
作为键的一部分拾取

例如,在第二行中,我应该获得
20191031 | 15 | ITOR | 8011898573

此外,如果它有帮助,它来自csv,我使用
na_filter=False

样本输入:

+------------+------+------+-----------+-------------+------+------------+
|  endOfDay  | book | bdr  |   cusip   |    isin     | Deal |     Id     |
+------------+------+------+-----------+-------------+------+------------+
| 31/10/2019 |   15 | ITOR | 371494AM7 |             |  161 | 8013210731 |
| 31/10/2019 |   15 | ITOR |           | 3.16248E+11 |      | 8011898573 |
| 31/10/2019 |   15 | ITOR |           |             |  352 | 8011898742 |
| 31/10/2019 |   15 | ITOR |           |             |      | 8011899418 |
+------------+------+------+-----------+-------------+------+------------+
+----------------------------+
|          join_key          |
+----------------------------+
| 43769|15|ITOR|371494AM7    |
| 43769|15|ITOR|316247735264 |
| 43769|15|ITOR|352          |
| 43769|15|ITOR|8011899418   |
+----------------------------+
样本输出:

+------------+------+------+-----------+-------------+------+------------+
|  endOfDay  | book | bdr  |   cusip   |    isin     | Deal |     Id     |
+------------+------+------+-----------+-------------+------+------------+
| 31/10/2019 |   15 | ITOR | 371494AM7 |             |  161 | 8013210731 |
| 31/10/2019 |   15 | ITOR |           | 3.16248E+11 |      | 8011898573 |
| 31/10/2019 |   15 | ITOR |           |             |  352 | 8011898742 |
| 31/10/2019 |   15 | ITOR |           |             |      | 8011899418 |
+------------+------+------+-----------+-------------+------+------------+
+----------------------------+
|          join_key          |
+----------------------------+
| 43769|15|ITOR|371494AM7    |
| 43769|15|ITOR|316247735264 |
| 43769|15|ITOR|352          |
| 43769|15|ITOR|8011899418   |
+----------------------------+

我们可以通过以下一般方式解决您的问题:

  • 首先,我们创建一个名为
    temp
    的临时列,它是回填的值
  • 我们在您的
    bdr
    列后插入该列
  • 我们将日期列转换为
    datetime
  • 我们可以
    '|'。连接前4列并创建
    连接键
  • 注意:我添加步骤3是为了保持代码的通用性,因此我们不会像您自己那样硬编码
    20191031

    s = df[['cusip', 'isin', 'Deal', 'Id']].replace('', np.NaN).bfill(axis=1).iloc[:, 0]
    df.insert(3, 'temp', s)
    
    df['endOfDay'] = pd.to_datetime(df['endOfDay']).dt.strftime('%Y%m%d')
    
    df['join_key'] = df.iloc[:, :4].apply(lambda x: '|'.join(x.astype(str).to_numpy()), axis=1)
    df = df.drop(columns='temp')
    

    您的第一段代码中有一个轻微的输入错误,应该是
    Id
    而不是
    Id
    假设这可能是您的脚本中的错误?对不起,那是我的错误,我的脚本很好,我在问题上输入了。我仍然需要这方面的帮助。
    cusip、isin、Deal
    中的空单元格是空字符串还是
    NaN
    ?@Erfan,我相信空字符串,就像我导入csv时使用的是
    na_过滤器
    如果我没有弄错的话,我相信这可以去除所有的
    NaN
    。谢谢你,Erfan,几个问题,1)我没有使用你的第二步,与前面的代码一样,我输入了日期。那么,
    df['join_key']
    是如何识别这个的呢?2) 如果我想添加一列该怎么办?3) 如果要在
    Id
    之后添加
    ,然后添加列,该怎么办?ie
    20191031 | 15 | ITOR | 8011898573.newcol
    很不清楚出了什么问题,我不认为这个问题很难解决,只是你的描述不清楚。只提供示例输入数据帧和示例输出数据帧是最简单的。通过这种方式,我们可以直观地看到您想要做什么。请提供一个输入数据框,这样当我运行我的解决方案时,它将提供不同于您预期输出的输出。您的
    join\u key
    中有
    43769
    来自何处?很抱歉,这是endOfDay,刚刚复制到excel格式已关闭