Python 熊猫使用两个数据帧比较和放置数据
python中有两个数据帧,如下所示:Python 熊猫使用两个数据帧比较和放置数据,python,pandas,Python,Pandas,python中有两个数据帧,如下所示: df2 ----------------------------- DATA_CLASS DATA_INFO DATA_SIZE 0 AA1 TYPE1 3 1 AAAB TYPE2 4 2 AACCC TYPE3 5 df1['DATA_INFO'] = '' for idx, row in df2.iterrows(): size =
df2
-----------------------------
DATA_CLASS DATA_INFO DATA_SIZE
0 AA1 TYPE1 3
1 AAAB TYPE2 4
2 AACCC TYPE3 5
df1['DATA_INFO'] = ''
for idx, row in df2.iterrows():
size = row['DATA_SIZE']
df1.loc[df1.DATA.str[:size] == row['DATA_CLASS'], 'DATA_INFO'] = row['DATA_INFO']
df1是原始数据集
df2是df1的列信息
import pandas as pd
df1 = pd.DataFrame()
data_list = ['AA1','AAABB','AACCCDDDD', 'AACCCDDDDEEEEE','AA111','AA11222']
df1['DATA'] = data_list
df1是这样的原始数据集:
df1
-------------------
DATA
-------------------
0 AA1
1 AAABB
2 AACCCDDDD
3 AACCCDDDDEEEEE
4 AA111
5 AA11222
df2代码:
df2 = pd.DataFrame()
data_list = ['AA1','AAAB','AACCC']
info_list = ['TYPE1','TYPE2','TYPE3']
size_list = [3, 4, 5]
df2['DATA_CLASS'] = data_list
df2['DATA_INFO'] = info_list
df2['DATA_SIZE'] = size_list
df2具有df1的“数据”列信息
df2如下所示:
df2
-----------------------------
DATA_CLASS DATA_INFO DATA_SIZE
0 AA1 TYPE1 3
1 AAAB TYPE2 4
2 AACCC TYPE3 5
df1['DATA_INFO'] = ''
for idx, row in df2.iterrows():
size = row['DATA_SIZE']
df1.loc[df1.DATA.str[:size] == row['DATA_CLASS'], 'DATA_INFO'] = row['DATA_INFO']
我想使用df2['DATA\u CLASS','DATA\u SIZE']在df1中输入'DATA\u INFO'
所以我这样写:
df2
-----------------------------
DATA_CLASS DATA_INFO DATA_SIZE
0 AA1 TYPE1 3
1 AAAB TYPE2 4
2 AACCC TYPE3 5
df1['DATA_INFO'] = ''
for idx, row in df2.iterrows():
size = row['DATA_SIZE']
df1.loc[df1.DATA.str[:size] == row['DATA_CLASS'], 'DATA_INFO'] = row['DATA_INFO']
因此,df1有了新的列“数据信息”:
DATA DATA_INFO
----------------------------------
0 AA1 TYPE1
1 AAABB TYPE2
2 AACCCDDDD TYPE3
3 AACCCDDDDEEEEE TYPE3
4 AA111 TYPE1
5 AA11222 TYPE1
但是我在使用dataframe.loc函数时遇到了一个问题
如果df1的行数超过100000行,而df2的行数超过10000行,则需要很长时间来处理
我认为dataframe的iterrows()是延迟的主要原因
有人知道如何解决df1中的put数据类型吗
不使用.loc函数?我认为您可以首先通过column
DATA\u SIZE
的值创建df1
的新列以及所有可能的子字符串,然后使用df1
和。如果订购很重要,请使用:
我认为您可以首先创建
df1
的新列,通过列DATA\u SIZE
的值使用所有可能的子字符串,然后使用df1
和。如果订购很重要,请使用:
非常感谢。就我而言,你是最好的。使用您的解决方案连接两个数据帧非常快。谢谢!就我而言,你是最好的。使用您的解决方案连接两个数据帧非常快。