当前位置: 首页 > 知识库问答 >
问题:

熊猫:具有重复索引的海螺

宰子琪
2023-03-14

我试图做集中四个DataFramesdf具有唯一索引和其他3index中具有重复值。这是我的代码:

import pandas as pd

data = {'id':['1','2','3','4','5','6'],
        'name':['A1','A2','A2','A1','A3','A3'],
        'date_create':['28-01-2020','15-02-2020','15-03-2020',
                       '25-03-2020','01-04-2020','30-05-2020']}
df = pd.DataFrame(data)

data = {'userid':['1','2','3','3','5','6'],
        'likesDate':['28-01-2020','15-02-2020','15-03-2020',
                       '25-03-2020','01-04-2020','30-05-2020']}
df1 = pd.DataFrame(data)

data = {'userid':['1','1','2','4','6','6'],
        'dislikesDate':['8-01-2020','1-02-2020','15-03-2020',
                       '25-03-2020','01-04-2020','30-05-2020']}
df2 = pd.DataFrame(data)

data = {'userid':['1','2','2','4','4','6'],
        'DeleteDate':['28-01-2020','15-02-2020','15-03-2020',
                       '25-03-2020','05-04-2020','23-05-2020']}
df3 = pd.DataFrame(data)

df.set_index('id', inplace=True)
df1.set_index('userid', inplace=True)
df2.set_index('userid', inplace=True)
df3.set_index('userid', inplace=True)

df_final = pd.concat([df,df1, df2,df3],axis=1)

print(df_final)

我得到这个错误:

ValueError: Shape of passed values is (7, 5), indices imply (6, 5)

什么,我哪里做错了?

共有1个答案

穆乐逸
2023-03-14

IIUC,您可以链接连接,而不是使用concat,因为您有重复的索引值。如果只有3个数据帧,则可能可以完全写入:

df_final = df.join(df1).join(df2).join(df3)
print(df_final.head())
#   name date_create   likesDate dislikesDate  DeleteDate
# 1   A1  28-01-2020  28-01-2020    8-01-2020  28-01-2020
# 1   A1  28-01-2020  28-01-2020    1-02-2020  28-01-2020
# 2   A2  15-02-2020  15-02-2020   15-03-2020  15-02-2020
# 2   A2  15-02-2020  15-02-2020   15-03-2020  15-03-2020
# 3   A2  15-03-2020  15-03-2020          NaN         NaN

但是,如果您想要一个能够接受更多数据帧的更灵活的解决方案,请使用reduce

from functools import reduce

df_final = (
    reduce(lambda x,y:x.join(y), [df,df1, df2,df3]) # same a chaining joins
      .rename_axis('user_id').reset_index() # user id back as a column if needed
)
print(df_final)
#    user_id name date_create   likesDate dislikesDate  DeleteDate
# 0        1   A1  28-01-2020  28-01-2020    8-01-2020  28-01-2020
# 1        1   A1  28-01-2020  28-01-2020    1-02-2020  28-01-2020
# 2        2   A2  15-02-2020  15-02-2020   15-03-2020  15-02-2020
# 3        2   A2  15-02-2020  15-02-2020   15-03-2020  15-03-2020
# 4        3   A2  15-03-2020  15-03-2020          NaN         NaN
# 5        3   A2  15-03-2020  25-03-2020          NaN         NaN
# 6        4   A1  25-03-2020         NaN   25-03-2020  25-03-2020
# 7        4   A1  25-03-2020         NaN   25-03-2020  05-04-2020
# 8        5   A3  01-04-2020  01-04-2020          NaN         NaN
# 9        6   A3  30-05-2020  30-05-2020   01-04-2020  23-05-2020
# 10       6   A3  30-05-2020  30-05-2020   30-05-2020  23-05-2020
 类似资料:
  • 我不确定我在哪里误入歧途,但我似乎无法重置数据帧上的索引。 当我运行时,我得到下面的输出: 如您所见,数据帧是一个切片,因此索引超出了范围。我想做的是重置此数据帧的索引。所以我运行。这将产生以下结果: 这看起来像是一个新的索引,但事实并非如此。运行同样,索引仍然相同。试图使用或会导致数据帧出现问题。 如何才能真正重置索引?

  • 问题内容: 在Pandas方法的文档中,我们具有: 我的结构如下: 我想要这样的东西: 但是当我运行该方法时,它是在说: 这没有意义,即使在示例中,该列上也有重复的条目。我将列用作数据透视表的索引,即方法调用的第一个参数。 问题答案: 对我来说还好吗?您可以发布正在使用的确切数据透视方法调用吗?

  • 我开始学习熊猫,发现了一个我似乎无法解决的问题。我正在从csv文件加载数据,需要删除一些与几个字符串匹配的行。 CSV: 我所尝试的: 但我得到的错误如下: 我错过了什么?另外,如果我想传递一个列表并从列表中删除所有匹配字符串的行,该怎么办?例子:

  • 我有1个数据帧,我想选择所有没有重复的行 我的df: 我的输出应该是: 我正在使用熊猫数据框 有什么建议吗?

  • 问题内容: 因此,我了解到可以使用DataFrame.groupby而不用使用MultiIndex进行子采样/横截面。 另一方面,当我在DataFrame上具有MultiIndex时,仍然需要使用DataFrame.groupby进行子采样/横截面。 那么,除了在打印时非常有用和漂亮地显示层次结构之外,MultiIndex有什么好处? 问题答案: 在pandas 0.4版本中引入了分级索引(也称为