繁体   English   中英

Pandas 将 dataframe 的列重命名为另一个 dataframe 的值,如果两个 Z6A8064B53C47945557755705 列的值匹配

[英]Pandas rename column of dataframe to value of another dataframe if values of two dataframe columns match

我有两个数据框。

dfA 包含两列“CCLE_ID”和“名称”以及其他不重要的列

dfB 包含两列“CCLE ID”和“细胞系”以及其他不重要的列。

现在,dfB['CCLE ID'] 值设置为 0。

我想要做的是比较dfA['Name']列和dfB['Cell line']列中的所有值。 它们都是字符串,代表细胞系的简写。 如果dfA['Name']dfB['Cell line']列的值匹配,那么我想用 dfA['CCLE_ID'] 列中的字符串替换dfA['CCLE_ID'] dfB['CCLE ID']列的值 0匹配的单元格名称。

老实说,我对如何做到这一点感到迷茫(熊猫初学者)。

首先,我们假设 dfA 和 dfB 具有相同的行数,因为如果它们不具有相同的行数,那么它会更复杂,您有两种选择:要么重塑数据帧以具有相同的行数,要么使用其他 Python 库来执行转换.

基于数据帧具有相同行数的初始假设,我将尝试逐步为您分解。

使用两个数据dfAdfB ,首先合并数据。 您可以稍后从 dfB 中删除额外的列。

为简单起见,要将 dfA 列合并到 dfB 中,请添加两列 dfaName 和 dfa_CCLE_ID。

dfB['dfaName'] = dfa['Name']
dfB['dfa_CCLE_ID'] = dfa['CCLE_ID']

然后使用pandas.dataFrame.apply()有条件地转换您的数据。

dfB['CCLE_ID'] = dfB[['dfaName','Cell line', 'dfa_CCLE_ID']].apply(lambda x: x['dfa_CCLE_ID'] if x['dfaName']==x['Cell line'] else x, axis=1)

一个不错的附加功能是使用dataframe 掩码生成并查看比较。 这是查看和测试数据转换的好步骤。 在此示例中,在 dfB 中创建一个额外的列,其中包含用于比较的真/假值。

dfB['column_matcher'] = dfb['dfaName']==dfB['Cell line']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM