【发布时间】:2019-08-05 06:03:48
【问题描述】:
有没有办法合并一系列不同长度的多维数据框? 有很多方法可以组合 df。我已经阅读了有关加入、连接、附加和合并的信息。我不知道该用哪一个。此外,它们都有许多可选参数,这使得它更加难以理解。有人可以澄清一下文档 (https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html),特别是关于如何合并数据框和不同长度的系列吗?
比如我想合并下面的多维数据框,
d = {'Name': ['Kitty', 'Harry', 'Bear', 'Sam', 'Max', 'Hunter', 'Fluffy'], 'Favloc': ['couch', 'windowsill', 'bed', 'basket', 'floor', 'carpet', 'haybale'], 'Pet': ['Cat', 'Cat', 'Cat', 'Dog', 'Dog', 'Dog', 'Hamster']}
df = pd.DataFrame(data=d)
df = df.set_index(['Pet', 'Name'])
print (df)
Favloc
Pet Name
Cat Kitty couch
Harry windows
Bear bed
Sam basket
Dog Max floor
Hunter carper
使用以下系列,s1:
s1 = pd.Series([3,3,1], index=['Cat','Dog','Hamster'])
我希望结果是:
Favloc
Pet cnts Name
Cat 3 Kitty couch
Harry windows
Bear bed
Sam basket
Dog 3 Max floor
Hunter carper
Hamster 1 Fluffy Haybale
我已经试过了
result = df.join(s1)
但这会引发错误:
Cannot join with no level specified and no overlapping names
我知道我没有指定级别,但我不知道如何指定。我应该说 1 级,因为我希望 cnts 位于 1 级索引上吗? (Favloc 为 0 级? 另外,我不明白“没有重叠的名字”,因为猫、狗和仓鼠是重叠的,对吧?
我也试过
result = pd.concat([df, s1])
这导致在我想查看 cnts 的每一列中都有一个带有 NAN 的数据框。
然后我尝试了:
result = pd.merge(df, s1)
我得到了: 无法将 DataFrame 与类型的实例合并
我用各种各样的论据尝试了所有这些,但我认为展示我尝试过的所有东西都没有帮助?我想我尝试了很多,因为我并不真正了解合并多维数据框和一系列不同长度的工作原理。
我看过相关的问题,但所有问题都只有一个级别的数据框,例如:How to merge a Series and DataFrame 那么,如何合并一个多维数据框和不同长度的序列呢?
【问题讨论】:
-
您是否在两个数据框上都尝试了
reset_index然后加入它们?
标签: python pandas dataframe merge series