【问题标题】:Can pandas duplicate data and merge with another dataframe熊猫可以复制数据并与另一个数据框合并吗
【发布时间】:2020-06-29 06:38:03
【问题描述】:

我的 df1 只有一行。 df2 有多行(我们说 8 行)

我使用 concat 函数来加入这些。 Concat 函数将 df1 置于 0 索引处,df2 从 df1 右侧的 index1 开始。

熊猫能否像 df2 一样重复 df1 并从索引 0 开始

【问题讨论】:

  • 你需要一个合并或加入。
  • 两个 df 都有不同的列/标题。我需要它们并排。

标签: python pandas


【解决方案1】:

想法是由DataFrame.reindex 在两个值中创建相同的索引,其中method='ffill' 用于重复值,然后concat,如果不同的第一个索引值用于正确匹配,也使用DataFrame.set_index

df1 = pd.DataFrame({
        'A':['s'],
         'B':[50],
         'C':[70]
})


df2 = pd.DataFrame({
        'D':list('abcdef'),
         'E':[4,5,4,5,5,4],
         'F':[7,8,9,4,2,3],

}, index = [10,11,12,13,14,15])

df1 = df1.set_index(df2.index[:len(df1)]).reindex(df2.index, method='ffill')
df = pd.concat([df1, df2], axis=1)
print (df)
    A   B   C  D  E  F
10  s  50  70  a  4  7
11  s  50  70  b  5  8
12  s  50  70  c  4  9
13  s  50  70  d  5  4
14  s  50  70  e  5  2
15  s  50  70  f  4  3

或者如果两个 DataFrame 中的第一个索引值相同:

df1 = pd.DataFrame({
        'A':['s'],
         'B':[50],
         'C':[70]
})


df2 = pd.DataFrame({
        'D':list('abcdef'),
         'E':[4,5,4,5,5,4],
         'F':[7,8,9,4,2,3],

})

df1 = df1.reindex(df2.index, method='ffill')
df = pd.concat([df1, df2], axis=1)
print (df)
   A   B   C  D  E  F
0  s  50  70  a  4  7
1  s  50  70  b  5  8
2  s  50  70  c  4  9
3  s  50  70  d  5  4
4  s  50  70  e  5  2
5  s  50  70  f  4  3

【讨论】:

  • 你能解释一下吗?我是熊猫的新手
  • Length mismatch: Expected 26 rows, received array of length 25 我收到的错误。
  • df1 = df1.set_index(df2.index[:len(df2)]).reindex(df2.index, method='ffill')
  • @HusnainIqbal - 有错字df1 = df1.set_index(df2.index[:len(df1)]).reindex(df2.index, method='ffill') 而不是df1 = df1.set_index(df2.index[:len(df2)]).reindex(df2.index, method='ffill')
  • 非常感谢。我是一步一步做的。一旦完成,它就完成了工作。
【解决方案2】:

正如我在评论中建议的那样,.join()(或.merge())是执行此操作的完美工具:

# A one-row DataFrame
df1 = pd.DataFrame([[1,2,3,4,5]], columns=list("abcde"))

# A multirow DataFrame
df2 = pd.DataFrame([[1],[2],[3],[4],[5]], columns=("f",))

# A combination
df1.join(df2, how='outer').ffill()
#     a    b    c    d    e  f
# 0  1.0  2.0  3.0  4.0  5.0  1
# 1  1.0  2.0  3.0  4.0  5.0  2
# 2  1.0  2.0  3.0  4.0  5.0  3
# 3  1.0  2.0  3.0  4.0  5.0  4
# 4  1.0  2.0  3.0  4.0  5.0  5

如果需要,您可以将浮点数转换回整数。

【讨论】:

    猜你喜欢
    • 2019-12-18
    • 2018-11-04
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2016-01-01
    相关资源
    最近更新 更多