我有两个数据帧
left = pd.DataFrame(
{"K": ["K0", "K0", "K1", "K2"], "A": ["A0", "A1", "A2", "A3"], "B": ["B0", "B1", "B2", "B3"]}
)
right = pd.DataFrame(
{"K": ["K0", "K0", "K0", "K2"], "C": ["C0", "C1", "C2", "C3"], "D": ["D0", "D1", "D2", "D3"]}
)
K A B
0 K0 A0 B0
1 K0 A1 B1
2 K1 A2 B2
3 K2 A3 B3
K C D
0 K0 C0 D0
1 K0 C1 D1
2 K0 C2 D2
3 K2 C3 D3
我希望将它们合并到一个数据帧中,以便在两个数据帧中都存在键的情况下只考虑行:
K A B C D
0 K0 A0 B0 C0 D0
1 K0 A1 B1 C1 D1
2 K2 A2 B2 C3 D3
如果我使用pandas.merge,我总是得到重复的行。有没有一个简单的方法来实现这一点?
使用pd.concat
data1="""Index K A B
0 K0 A0 B0
1 K0 A1 B1
2 K1 A2 B2
3 K2 A3 B3"""
data2="""K C D
0 K0 C0 D0
1 K0 C1 D1
2 K0 C2 D2
3 K2 C3 D3"""
data1 = pd.read_table(StringIO(data1), sep='\s+')
data1 = data1.rename(columns={'K':'K1'})
data2 = pd.read_table(StringIO(data2), sep='\s+')
data2 = data2.rename(columns={'K':'K2'})
data = pd.concat([data1, data2], axis=1)
#print(data1,data2)
data = data.drop(data[data.K1 != data.K2].index, axis=0)
data.drop('K2',axis=1,inplace=True)
print(data)
输出
Index K1 A B C D
0 0 K0 A0 B0 C0 D0
1 1 K0 A1 B1 C1 D1
3 3 K2 A3 B3 C3 D3
枚举键,然后合并键和枚举:
(left.assign(enum=left.groupby('K').cumcount())
.merge(right.assign(enum=right.groupby('K').cumcount()),
on=['K', 'enum'])
.drop('enum', axis=1)
)
输出:
K A B C D
0 K0 A0 B0 C0 D0
1 K0 A1 B1 C1 D1
2 K2 A3 B3 C3 D3
最好的, E.
我有两个数据帧,DF1和DF2,DF1是存储来自DF2的任何附加信息的主机。 假设DF1是以下格式, DF2包含DF1中已经存在的2个条目和两个新条目。(itemId和item被视为一个组,可以被视为连接的键) 我需要合并两个数据框,以便增加现有项目计数并插入新项目。 结果应该是这样的: 我有一种方法可以做到这一点,但不确定这种方法是否有效或正确
我正在尝试连接到数据帧。它们看起来像这样 期望的最终目标是: 我一直试图使用pd.merge和。连接函数与on='外'设置不成功
我有两个数据帧DF1和DF2。 DF1: DF2: 我需要来自DF2的行数,其中EmploymentType='Employee',EmpStatus='Active',EmpStartDate 输出: 如何在不合并两个数据帧的情况下实现这一点? 我不能合并数据帧,因为没有公共键,而且因为我需要基于条件的行数,我不能在任何临时列上加入数据帧,因为我需要避免交叉连接。
我肯定错过了一些简单的东西。尝试合并熊猫中的两个数据帧,它们的列名基本相同,但右边的数据帧有一些左边没有的列,反之亦然。 我已尝试使用外部联接进行联接: 但这会产生: 我还指定了一个要连接的列(例如,on="id"),但这会重复所有列,除了"id",如attr_1_x、attr_1_y,这并不理想。我还传递了整个列列表(有很多)到on: 其产生: 我错过了什么?我想得到一个附加了所有行的df,并且
我有一个包含18个数据帧的列表: 所有数据帧都有一个公共id列,因此很容易将它们与pd连接在一起。一次合并2个。有没有一种方法可以一次将它们连接起来,从而使dfList作为单个数据帧返回?