如何在Pandas中合并两个具有列表条目的 Dataframe ,其中只有一个列表条目必须匹配?

qpgpyjmq  于 2023-06-04  发布在  其他
关注(0)|答案(3)|浏览(191)

尝试合并一个 Dataframe 时,有多个值的列,我合并?
我正试图合并两个 Dataframe 的一个列有列表条目。如果列表中的任何值匹配,我希望合并发生。例如,我有一个dataframe,它看起来如下所示:
| 色谱柱A| B柱|
| - -----|- -----|
| a| [val1,val2,val3]|
| B| [val4,val5]|
我的目标是将它合并到列B上的dataframe中,如下所示
| 色谱柱C| D列|
| - -----|- -----|
| x| val1|
| y| val4|
我想要的结果是
| 色谱柱A| D列|色谱柱C|
| - -----|- -----|- -----|
| a| val1| x|
| B| val4| y|
我无法单独使用Pandas来实现这一点,并且想知道是否需要编写自己的函数来执行这种类型的合并。

vngu2lb8

vngu2lb81#

在本例中,看起来您需要在合并之前进行一些预处理。本质上,您希望取消列出列表中的元素,并为列表中的每个元素设置一行。完成此步骤后,您应该能够使用标准的merge操作。
下面是一个粗略的例子,说明如何在Python中使用pandas来实现这一点:

import pandas as pd

# Assuming your dataframes are df1 and df2

# Create a new dataframe where each value in the list of df1.Column B
# has its own row (with the corresponding value from df1.Column A)
df1 = df1.explode('Column B')

# Now you can merge the two dataframes
merged_df = pd.merge(df1, df2, left_on='Column B', right_on='Column D', how='inner')

# Drop the extra columns
merged_df = merged_df.drop(['Column B', 'Column D'], axis=1)

# Rename the columns if needed
merged_df.columns = ['Column A', 'Column C', 'Column D']

# Your merged dataframe is ready

此代码将为df1['Column B']中列表中的每个元素创建一个新行。然后,它将df1df2合并,其中分解的Column BColumn D匹配。最后,它通过删除不必要的列并重命名剩余的列来清理生成的DataFrame。

i2loujxw

i2loujxw2#

试试这个:

df = df2.merge(df.explode("Column B"), right_on='Column B', left_on='Column D')
b4lqfgs4

b4lqfgs43#

一个示例,该示例合并了包含列表条目的列上的两个 Dataframe ,并与列表中的任何值匹配

import pandas as pd

def merge_df(df1, df2, col1, col2):
    merged_data = []
    for _, row1 in df1.iterrows():
        for _, row2 in df2.iterrows():
            if any(item in row2[col2] for item in row1[col1]):
                merged_data.append([row1['Column A'], row2[col2], row2['Column C']])
    merged = pd.DataFrame(merged_data, columns=['Column A', 'Column D', 'Column C'])
    return merged

# Example usage
df1 = pd.DataFrame({'Column A': ['a', 'b'],
                    'Column B': [['val1', 'val2', 'val3'], ['val4', 'val5']]})

df2 = pd.DataFrame({'Column C': ['x', 'y'],
                    'Column D': ['val1', 'val4']})

merged_df = merge_df(df1, df2, 'Column B', 'Column D')
print(merged_df)
#   Column A Column D Column C
# 0        a     val1        x
# 1        b     val4        y

相关问题