【发布时间】:2020-06-29 06:38:03
【问题描述】:
我的 df1 只有一行。 df2 有多行(我们说 8 行)
我使用 concat 函数来加入这些。 Concat 函数将 df1 置于 0 索引处,df2 从 df1 右侧的 index1 开始。
熊猫能否像 df2 一样重复 df1 并从索引 0 开始
【问题讨论】:
-
你需要一个合并或加入。
-
两个 df 都有不同的列/标题。我需要它们并排。
我的 df1 只有一行。 df2 有多行(我们说 8 行)
我使用 concat 函数来加入这些。 Concat 函数将 df1 置于 0 索引处,df2 从 df1 右侧的 index1 开始。
熊猫能否像 df2 一样重复 df1 并从索引 0 开始
【问题讨论】:
想法是由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')
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')
正如我在评论中建议的那样,.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
如果需要,您可以将浮点数转换回整数。
【讨论】: