在没有 For 循环的情况下,使用 Python 中另一个数据帧的条件更新一个数据帧中的列

迪普·辛格

我有一个加载中央文件的数据框。此处每月更新新文件。由于复制到数据框中的文件中几乎没有丢失的列,因此我创建了一个映射数据框,它在满足丢失列的条件时将值添加到数据框。

以下是中心文件示例:

ID	Region	Country	Code	User	Order Price
1		Germany		ABC	2342545
2		Italy		DEF	5464545
3		USA		GHI	3245325
4		India		JKL	676565
5		Mexico		MNO	3443252
6		China		PQR	565445
7		Germany		STU	765765
8		Mexico		VWX	564566
9		China		YZA	346534
10		India		BCD	5675765

这是我缺少区域和代码的映射文件

Country	Region	Code
Germany	EU	1
Italy	EU	2
USA	America	3
India	Asia	4
Mexico	America	5
China	Asia	6

这是预期的输出:

ID	Region	Country	Code	User	Order Price
1	EU	Germany	1	ABC	2342545
2	EU	Italy	2	DEF	5464545
3	America	USA	3	GHI	3245325
4	Asia	India	4	JKL	676565
5	America	Mexico	5	MNO	3443252
6	Asia	China	6	PQR	565445
7	EU	Germany	2	STU	765765
8	America	Mexico	5	VWX	564566
9	Asia	China	6	YZA	346534
10	Asia	India	4	BCD	5675765

我所做的是使用带有 iterrows() 的 for 循环来更新数据框中的值。

问题是它超级慢,更新大约 60,000 条记录需要大约一个小时或更长时间。

这是我的代码:

        for central_update_index, central_update_row in central_bridge_file.iterrows():
        print('index: ', central_update_index)
        for bridge_match_index, bridge_match_row in central_bridge_matching_file.iterrows():
            if bridge_match_row['Country'] == central_update_row['Country']:
                if central_update_row['Country / Company (P2)'] == bridge_match_row['Country']:
                    central_bridge_file.loc[central_update_index, 'Code'] = \
                        bridge_match_row['Code']
                    central_bridge_file.loc[central_update_index, 'Region'] = bridge_match_row[
                        'Region']

有人可以帮助我如何编写 lambda 语句或可以在几分钟内完成的东西吗?

斯科特·波士顿

给df,

   ID  Region  Country  Code User  Order Price
0   1     NaN  Germany   NaN  ABC      2342545
1   2     NaN    Italy   NaN  DEF      5464545
2   3     NaN      USA   NaN  GHI      3245325
3   4     NaN    India   NaN  JKL       676565
4   5     NaN   Mexico   NaN  MNO      3443252
5   6     NaN    China   NaN  PQR       565445
6   7     NaN  Germany   NaN  STU       765765
7   8     NaN   Mexico   NaN  VWX       564566
8   9     NaN    China   NaN  YZA       346534
9  10     NaN    India   NaN  BCD      5675765

和 df_map,

   Country   Region  Code
0  Germany       EU     1
1    Italy       EU     2
2      USA  America     3
3    India     Asia     4
4   Mexico  America     5
5    China     Asia     6

您可以merge在“国家/地区”上使用这两个数据框:

df[['ID','Country','User','Order Price']].merge(df_map)

输出:

   ID  Country User  Order Price   Region  Code
0   1  Germany  ABC      2342545       EU     1
1   7  Germany  STU       765765       EU     1
2   2    Italy  DEF      5464545       EU     2
3   3      USA  GHI      3245325  America     3
4   4    India  JKL       676565     Asia     4
5  10    India  BCD      5675765     Asia     4
6   5   Mexico  MNO      3443252  America     5
7   8   Mexico  VWX       564566  America     5
8   6    China  PQR       565445     Asia     6
9   9    China  YZA       346534     Asia     6

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在不使用for循环的情况下,使用具有条件的另一个数据帧中的数据在数据帧中创建列

将一个数据帧中的列附加到另一个数据帧中,并在循环中有多个匹配项

如何在另一个数据帧 python pandas 中的多列上使用条件逻辑在数据帧中创建一列?

Python:如何在不删除重复项的情况下将一个数据帧中的列值替换为另一个

使用来自另一个数据帧的值有条件地填充数据帧中的列

Python:使用 id 将字符串值从一个数据帧映射到另一个数据帧,同时在旧数据帧中创建一个新列

如何使用从 Python 中的另一个数据帧计算的最常用单词计算列?

将条件中的行从一个数据帧替换为另一个具有不同长度的行 [python]

在python熊猫中,如何合并两个数据帧,同时使用另一个的权重将值散布在一个数据中?

有条件地循环一个数据帧中的染色体和位置到另一个数据帧中的染色体和间隔

在R中循环通过一个数据帧以有条件地生成另一个数据帧,其中第一个数据帧中的每一行都有一个或多个行

Python Pandas-使用另一个数据库中的值更新数据框架,而无需替换现有数据库

在 Python Pandas 中,如何在不使用 for 循环的情况下比较一个数据帧中的不同行

将星号附加到现有数据帧值,基于 Python 中另一个数据帧的掩码

使用不具有相同列名的另一个单独数据帧中的一个数据帧中的 id 获取数据并将字符串附加到一个值

使用新字段和现有字段将数据从一个数据帧映射到另一个数据帧

Python Pandas - 将带有“系列”的数据帧加入另一个数据帧

基于 Python 中的另一个数据帧更新数据帧

使用另一个数据帧更改一个数据帧中的记录值,同时保持记录中的所有其他值不变(Pandas)

使用另一个数据帧仅更新数据帧中的某些值

使用具有中间表的另一个数据库中的另一个表的列更新部分数据

Python:根据条件将信息从一个数据帧提取到另一个(具有不同长度)

如何根据另一个数据帧 Python3 的条件删除数据帧中的列

使用熊猫有条件地在python中连接一个数据框

在传递给带有 2 个参数的函数时,循环遍历一个数据帧的一列,同时维护另一个数据帧

我如何通过一个数据帧中的某个级别中某个级别的另一个因素的子集来操纵数据而没有循环

Python:在给定两个数据帧的几列之间相等的情况下,将数据帧的值设置为等于另一个数据帧的值

如果一个列字符串包含在另一个使用 Python 的列字符串中,则一对多合并两个数据帧

使用python循环在一个数据帧的一个excel工作簿中创建多个excel表