【发布时间】:2019-05-20 22:17:47
【问题描述】:
我有两个数据框,如果 df1 的“A”列的值包含在 df2 的“B”列的单元格中,我想将行从数据框 df2 插入到 df1。如果是这种情况,那么我想在 df1 中的“A”列的匹配值下方插入行。需要插入的行是根据“关键字”列从 df2 中提取的,就像我从“关键字”列中的一个“测试”到以下“测试”一样。
这是数据框:
df1
A Keyword B C
m55 m32\nm83\nm18 123
m56 m12 546
m68
m32
m83
m65
m73 m77\nm78 558
m23
m98
m77
m18
m4
m12
m78
我有第二个数据框 (df2),我从中提取行并插入 df1。我正在从“关键字”列中的“测试”到“测试”中提取行。
df2
Keyword Matches C
test m32\nm83\nm18 123
something
something
something
test
something
something
test m12 546
something
test m77\nm78 558
test
something
所以,最后我需要这个:
df1
A Keyword B C
m55 m32\nm83\nm18 123
m56 m12 546
m68
m32
test m32\nm83\nm18 123
something
something
something
m83
test m32\nm83\nm18 123
something
something
something
m65
m73 m77\nm78 558
m23
m98
m77
test m77\nm78 558
m18
test m32\nm83\nm18 123
something
something
something
m4
m12
test m12 546
something
m78
test m77\nm78 558
如何做到这一点?
编辑:
首先我有这个功能:
def insert_row(idx, df, df_insert):
return df.iloc[:idx, ].append(df_insert).append(df.iloc[idx:, ]).reset_index(drop = True)
然后我创建了从 df2 中提取行的函数:
def TestStepsReturn(df, SearchingElement):
TestCaseList = df.index[df["Keyword"] == "test"].tolist()
TestCaseList = np.asarray(TestCaseList)
try:
idx = TestCaseList[TestCaseList <= df.index[df["Matches"].str.contains(SearchingElement)][0]].max()
idx = np.where(TestCaseList == idx)
if idx[0][0]!=(len(TestCaseList)-1):
return df.loc[TestCaseList[idx[0][0]]:TestCaseList[idx[0][0]+1]-1]
return df.loc[TestCaseList[idx[0][0]]:]
except:
return pd.DataFrame(columns=df.columns)#return the empty data frame with the same columns names
然后我创建了另一个使用 TestStepsReturn:
def SerchIDs(dfFidx, df1, df2, SearchingColumn):
for feature in dfFidx:
feature += i
df_new = TestStepsReturn(df2, df1.loc[feature, SearchingColumn])#
df1 = insert_row(feature+1, df1, df_new)
i += int(df_new.size/len(df_new.columns.values))
return df
然后我有代码:
dfFidx = df1.index
df1 = SerchIDs(dfFidx, df1, df2, "A")
【问题讨论】:
-
不要忘记添加代码以防止投票...
-
我们如何重现您的数据框?如果您不向我们提供创建数据框的代码,这将非常耗时。让我们更容易为您提供帮助:)
-
@jezrael-好的,我必须以更艰难的方式学习它。我也很着急。
-
@slobokv83 - 是的,我正在研究解决方案,但真的很复杂...... :(
-
@Mohit-我添加了代码。这就是思维方式。
标签: python pandas dataframe contains