如何对Pandas中的两个后序列求和并得到一个结果?

sdnqo3pr  于 2023-01-19  发布在  其他
关注(0)|答案(2)|浏览(128)

我有一个包含670列和2856行的大型数据集。我们的想法是对两个连续行求和,然后检索单个列和值作为结果。重要的是不要用第一列+第二列,然后第三列+第四列的方式进行替换而不是第二列+第三列。
| 索引|识别码1|识别码2|ID3|ID4|
| - ------|- ------|- ------|- ------|- ------|
| 第一次|无|1个|无|1个|
| 第二次|无|无|1个|1个|
结果应该是
| 索引|ID12|ID34|
| - ------|- ------|- ------|
| 第一次|1个|1个|
| 第二次|无|第二章|
示例 Dataframe :

df = pd.DataFrame({"ID1" : [0,0,0,1,1,1] , "ID2" :[1,1,1,0,0,0], "ID3" : [0,1,1,1,0,1]},"ID4" : [0,0,0,0,0,0])
result = pd.DataFrame({"ID1/2" : [1,1,1,0,0,0] , "ID3/4" :[0,1,1,1,0,1]})

我试过:

res = []
for i in range(len(df)):
              for j in range(1,len(df.columns),2):
                            res.append(data.iloc[i,j]+data.iloc[i,j-1])
result = pd.DataFrame(res)

R中,结果为:

result <- matrix(nrow = nrow(df), ncol = ncol(df),)
for (i in seq(1,ncol(df),2)){
  result[,i] <- df[,i]+df[,i+1]
}
#Erasing the NAs columns
result <- result [,-seq(2,ncol(result ),2)]
nsc4cvqm

nsc4cvqm1#

N = len(df.columns)
new_df = df.groupby(np.arange(N) // 2, axis="columns").sum()
new_df.columns = [f"ID{j}{j+1}" for j in range(1, N, 2)]
  • groupby每2列并求和
  • 将范围(len(columns))除以2得到组号:0,0,1,1,2,2...
  • 在range(N)上步进2形成新列以得到1、3...

得到

>>> new_df

        ID12  ID34
Index
First      1     1
Second     0     2
epfja78i

epfja78i2#

使用"魔法"切片:

res = pd.DataFrame(df.values[:, ::2] + df.values[:, 1::2],
                   columns=df.columns[::2] + df.columns[1::2].str[2:], index=df.index)
ID12  ID34
First       1     1
Second      0     2

相关问题