Python 熊猫、fillna/b填充至concat和聚结场
我试图在join_键中执行以下逻辑。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']
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列并创建连接键
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
之后添加
,然后添加列,该怎么办?ie20191031 | 15 | ITOR | 8011898573.newcol
很不清楚出了什么问题,我不认为这个问题很难解决,只是你的描述不清楚。只提供示例输入数据帧和示例输出数据帧是最简单的。通过这种方式,我们可以直观地看到您想要做什么。请提供一个输入数据框,这样当我运行我的解决方案时,它将提供不同于您预期输出的输出。您的join\u key
中有43769
来自何处?很抱歉,这是endOfDay,刚刚复制到excel格式已关闭