Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧合并/加入_Python_Pandas_Merge - Fatal编程技术网

Python 数据帧合并/加入

Python 数据帧合并/加入,python,pandas,merge,Python,Pandas,Merge,好的,我有两个数据帧,它们都有一个公共列('ID')。现在,我想将所有键及其值从dfu 2添加到dfu 1中,以匹配它们各自的'ID'。我在下面添加了一个最小可复制的示例。在这种情况下,ID的顺序相同。然而,情况决不能是这样。两个数据帧始终包含相同的ID。需要注意的是,每个ID都不是唯一的,但是,对于两个数据帧,一个ID的出现顺序是相同的 x={'ID':[1]*50+[2]*50), “行”:[9,2,8,4,2,5,2,1,1,6,5,6,3,1,1,2,1,2,3,8,3,2, 8, 8,

好的,我有两个数据帧,它们都有一个公共列(
'ID'
)。现在,我想将所有键及其值从
dfu 2
添加到
dfu 1
中,以匹配它们各自的
'ID'
。我在下面添加了一个最小可复制的示例。在这种情况下,ID的顺序相同。然而,情况决不能是这样。两个数据帧始终包含相同的ID。需要注意的是,每个ID都不是唯一的,但是,对于两个数据帧,一个ID的出现顺序是相同的

x={'ID':[1]*50+[2]*50),
“行”:[9,2,8,4,2,5,2,1,1,6,5,6,3,1,1,2,1,2,3,8,3,2,
8, 8, 7, 4, 2, 3, 7, 7, 7, 4, 3, 7, 5, 6, 8, 7, 4, 5, 7, 1, 8, 9,
4, 1, 6, 1, 7, 1, 5, 9, 9, 9, 4, 6, 5, 1, 7, 9, 5, 9, 6, 8, 6, 7,
4, 3, 4, 4, 7, 2, 7, 8, 6, 6, 8, 5, 4, 9, 9, 4, 3, 9, 7, 8, 3, 5,
1, 6, 1, 6, 8, 2, 1, 4, 3, 7, 7, 6], 
'块':[2,8,8,2,4,1,6,4,2,7,7,1,3,1,4,8,4,2,5,2,4,9,
3, 6, 6, 1, 4, 2, 7, 4, 4, 1, 9, 8, 5, 1, 1, 4, 6, 4, 9, 1, 7, 4,
5, 3, 6, 2, 6, 8, 5, 9, 5, 8, 1, 8, 3, 3, 5, 7, 3, 2, 5, 9, 6, 4,
3, 9, 7, 5, 2, 1, 2, 4, 6, 7, 7, 8, 2, 2, 7, 7, 9, 3, 8, 7, 3, 3,
1, 4, 6, 2, 6, 2, 8, 1, 1, 7, 5, 1]}
y={'ID':[1]*50+[2]*50),
‘Var1’:[8,3,8,3,2,7,8,9,6,5,6,6,3,8,3,6,4,6,2,6,2,
7, 3, 4, 7, 4, 9, 1, 5, 5, 5, 2, 9, 2, 5, 5, 1, 9, 9, 8, 2, 4, 2,
8, 7, 5, 8, 3, 9, 5, 9, 1, 1, 9, 9, 6, 3, 7, 1, 9, 8, 3, 3, 5, 7,
3, 8, 9, 1, 5, 2, 3, 3, 5, 5, 9, 6, 7, 4, 4, 1, 9, 7, 9, 8, 5, 4,
2, 5, 5, 8, 7, 5, 9, 9, 4, 5, 4, 8], 
‘Var2’:[3,3,3,8,9,5,7,5,5,3,7,5,7,7,2,1,3,9,8,5,5,1,
1, 8, 5, 3, 1, 5, 4, 3, 5, 2, 3, 2, 7, 3, 9, 4, 8, 4, 6, 6, 2, 3,
8, 3, 3, 6, 6, 4, 8, 4, 1, 9, 8, 9, 5, 7, 6, 9, 4, 6, 8, 5, 7, 2,
2, 8, 9, 1, 9, 4, 8, 8, 6, 8, 1, 1, 4, 7, 8, 4, 1, 2, 2, 9, 5, 3,
7, 4, 5, 4, 5, 1, 2, 3, 5, 9, 2, 4]}
df_1=pd.数据帧(x)
df_2=局部数据帧(y)
我的做法:

def添加分析(数据,ana):
对于ana.keys()中的键:
如果键=='ID':
持续
添加\u db\u键(ana、数据、键)
def添加数据库密钥(数据数据库、数据加载、密钥):
对于data_db.ID中的ID:
data\u loaded.loc[data\u loaded['ID']==ID,key]=data\u db[data\u db.ID==ID][key]。值
添加分析(df_1,df_2)

这很好,但是,对于大型数据帧来说,它永远需要,因为我正在遍历数据帧的每一列和每一行。我觉得这是非常低效的,可能有一个合并操作可以做到这一点,但是,最重要的是ID必须匹配,并且必须保留顺序。非常感谢您对要查看的函数的指针的任何帮助。提前感谢。

您的函数对我不起作用(它们没有返回值)。 但是,如果我理解正确,您可以通过以下方式解决问题:

df_1['ID_idx'] = df_1.reset_index().apply(lambda x: f"{x['ID']}_{x['index']}", axis=1)
df_2['ID_idx'] = df_1.reset_index().apply(lambda x: f"{x['ID']}_{x['index']}", axis=1)
df = df_1.merge(df_2, right_on='ID_idx', left_on='ID_idx')

并最终删除不需要的列。

函数在原地工作时不应返回任何内容。我会试试你的解决方案是否有效,是否更快。无论如何,感谢您的贡献:)