在 pandas dataframe 中追加列

这可能很简单,但我有以下数据:

在 data frame 1中:

index dat1
0     9
1     5

在 data frame 2 中:

index dat2
0     7
1     6

我想要一个 data frame,其格式如下:

index dat1  dat2
0     9     7
1     5     6

我尝试过使用 append方法,但是我得到了一个 cross join (即笛卡儿积)。

怎么做才是正确的?

445280 次浏览

只是一个正确的谷歌搜索的问题:

data = dat_1.append(dat_2)
data = data.groupby(data.index).sum()

总的来说,你似乎只是在寻找一种联系:

> dat1 = pd.DataFrame({'dat1': [9,5]})
> dat2 = pd.DataFrame({'dat2': [7,6]})
> dat1.join(dat2)
dat1  dat2
0     9     7
1     5     6

你亦可使用:

dat1 = pd.concat([dat1, dat2], axis=1)

join()concat()都可以解决这个问题。但是,有一个警告我必须提到: 如果试图通过从另一个 DataFrame 中选择某些行来处理某些数据帧,请在 ABC0或 concat()之前重置索引。

下面的一个例子展示了 join 和 concat 的一些有趣的行为:

dat1 = pd.DataFrame({'dat1': range(4)})
dat2 = pd.DataFrame({'dat2': range(4,8)})
dat1.index = [1,3,5,7]
dat2.index = [2,4,6,8]


# way1 join 2 DataFrames
print(dat1.join(dat2))
# output
dat1  dat2
1     0   NaN
3     1   NaN
5     2   NaN
7     3   NaN


# way2 concat 2 DataFrames
print(pd.concat([dat1,dat2],axis=1))
#output
dat1  dat2
1   0.0   NaN
2   NaN   4.0
3   1.0   NaN
4   NaN   5.0
5   2.0   NaN
6   NaN   6.0
7   3.0   NaN
8   NaN   7.0


#reset index
dat1 = dat1.reset_index(drop=True)
dat2 = dat2.reset_index(drop=True)
#both 2 ways to get the same result


print(dat1.join(dat2))
dat1  dat2
0     0     4
1     1     5
2     2     6
3     3     7




print(pd.concat([dat1,dat2],axis=1))
dat1  dat2
0     0     4
1     1     5
2     2     6
3     3     7

您可以分配一个新列。使用索引对齐相应的行:

df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [10, 20, 30]}, index=[0, 1, 2])
df2 = pd.DataFrame({'C': [100, 200, 300]}, index=[1, 2, 3])


df1['C'] = df2['C']

结果:

   A   B      C
0  1  10    NaN
1  2  20  100.0
2  3  30  200.0

忽略指数:

df1['C'] = df2['C'].reset_index(drop=True)

结果:

   A   B    C
0  1  10  100
1  2  20  200
2  3  30  300

也许太简单了。

dat1 = pd.DataFrame({'dat1': [9,5]})
dat2 = pd.DataFrame({'dat2': [7,6]})
dat1['dat2'] = dat2  # Uses indices from dat1

结果:

    dat1  dat2
0     9     7
1     5     6