我有3个数据帧在df1
df2
DF3
我正在寻找以下输出df1
我已经尝试了多种方法,但无法实现这一点,我是Python编码新手,有什么方法可以实现这一点吗?在我尝试的代码下面,它确实匹配并返回find/not found,但还无法为匹配行分配df1[col4]=df2[col4]。
for i in df3.index:
if "," in df3.loc[i,"col_combination"]:
print("multi column values to handle later")
else:
df1['col4'] = np.where(df1[df3.loc[i, "col_combination"]].isin(df2[df3.loc[i, "col_combination"]]),'found','not found')
del df1['col4']
# read every condition in df3
# and merge related df2 columns to df1
# with the condition column
for i, row in df3.iterrows():
priority = row['priority']
col_list = row['col_combination'].split(',')
df1 = pd.merge(df1, df2[col_list + ['col4']], on=col_list, how='left')
# rename every merge df1's new col4 to priority no.
df1.rename(columns={'col4':priority}, inplace=True)
print(df1)
# srno col1 col2 col3 1 2
# 0 1 a1 a2 a3 g1 NaN
# 1 2 b1 c2 c3 NaN g3
# 2 3 d1 b2 NaN NaN g2
# 3 4 e1 e2 e3 NaN NaN
priority_list = df3['priority'].tolist()
obj = df1[priority_list[0]]
# use combine_first to merge priority(columns) 1, 2
for priority in priority_list[1:]:
obj = obj.combine_first(df1[priority])
# re-assign
df1['col4'] = obj
print(df1)
# srno col1 col2 col3 1 2 col4
# 0 1 a1 a2 a3 g1 NaN g1
# 1 2 b1 c2 c3 NaN g3 g3
# 2 3 d1 b2 NaN NaN g2 g2
# 3 4 e1 e2 e3 NaN NaN NaN
# finally del priority columns
df1.drop(priority_list, axis=1, inplace=True)
如果df2中不存在数据,我会尝试从df1获取数据,df1中的col1应该与df2中的col3对齐(col2和col4相同)
这个问题类似于我在这里发现的:将一个数据框中的行(带有行名)与另一个数据框中匹配的列名相乘 但是不是匹配行和乘法,我想将df1中的列值与df2中的列名匹配,并在新的df3中返回df2的相应行值。 这就是我想要的: 在我的实际 df1 和 df2 中有 64 行,其中 df1 中的“V1”对应于 df2 中“name”列的数字索引。在我的df2中,有22列,即一列带有“名称”,另一列21列带有“X
问题内容: 我有2个带有通用列/键(x,y)的熊猫数据框df1和df2。 我想对键(x,y)进行“(df1&not df2)”合并,这意味着我希望我的代码返回仅包含df1中而不包含df2中包含(x,y)行的数据框。 SAS具有等效功能 谁能优雅地在熊猫中复制相同的功能?如果我们可以在merge()中指定how =“ left-right”,那就太好了。 问题答案: 我刚刚升级到10天前发布的版本0
我有两个不同大小的数据帧,我想对四个不同列中的所有值进行比较(两组) 基本上,我希望看到df1['A']==df2['A'] 我的实际数据帧要大得多(120000行数据,A列的值从1到700,B列的值从1到300),所以我知道这可能是一个更长的过程。
我有两个数据帧,希望比较它们并返回第一个数据帧(df1)中不在第二个数据帧(df2)中的行。我找到了一种比较它们并返回差异的方法,但无法找出如何只返回df1中缺失的部分。
我有两个数据帧,一个包含数据,第二个包含代码及其解码值。我想将df1[代码]与df2[代码]匹配,并将df2[值]粘贴在df1中。需要注意的是,我的第二个数据帧包含代码和值一次,基本上是一张代码和值,但在第一个数据帧中,代码是重复的,因此将粘贴的值列应该代表每次代码出现在df1[代码]列中时的值。 我需要: 基本上是从第二个数据帧转换一个数据帧中的代码。