【发布时间】:2016-03-10 07:52:15
【问题描述】:
我在 python pandas 中有两个这样的数据框:
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的'DATA'的列信息
df2 像这样:
df2
-----------------------------
DATA_CLASS DATA_INFO DATA_SIZE
0 AA1 TYPE1 3
1 AAAB TYPE2 4
2 AACCC TYPE3 5
我想使用 df2 ['DATA_CLASS','DATA_SIZE'] 将 'DATA_INFO' 放入 df1。
所以我是这样写的:
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_INFO”:
DATA DATA_INFO
----------------------------------
0 AA1 TYPE1
1 AAABB TYPE2
2 AACCCDDDD TYPE3
3 AACCCDDDDEEEEE TYPE3
4 AA111 TYPE1
5 AA11222 TYPE1
但我在使用 dataframe .loc 函数时遇到了问题。
如果 df1 的行数超过 100,000 而 df2 的行数超过 10,000,则需要很长时间来处理
我认为 dataframe 的 iterrows() 是延迟的主要原因
有没有人知道如何解决将数据类型放入 df1 不使用 .loc 函数?
【问题讨论】: