pandas 当按列分组时,在与 Dataframe 关联时停止添加额外的列

sgtfey8w  于 2023-06-04  发布在  其他
关注(0)|答案(1)|浏览(142)

我想使用下面的代码只连接到中的行。我试过改变concat方法的索引和轴,但没有成功。

df = pd.DataFrame(({'C1':['a','b','c','a','b','c'], 'C2':[1,2,3,4,5,6], 'C3':[1,2,3,4,5,6]}))
dfNew = pd.DataFrame()
for name, group in df.groupby('C1', sort=False):
    dfNew = pd.concat([dfNew, group, pd.Series(np.nan)])

实际产量:

C1  C2  C3  0
0   a   1.0 1.0 NaN
1   a   4.0 4.0 NaN
0   NaN NaN NaN NaN
0   b   2.0 2.0 NaN
1   b   5.0 5.0 NaN
0   NaN NaN NaN NaN
0   c   3.0 3.0 NaN
1   c   6.0 6.0 NaN
0   NaN NaN NaN NaN

所需输出:

C1  C2  C3  
0   a   1.0 1.0 
1   a   4.0 4.0 
0   NaN NaN NaN 
0   b   2.0 2.0 
1   b   5.0 5.0 
0   NaN NaN NaN 
0   c   3.0 3.0 
1   c   6.0 6.0 
0   NaN NaN NaN 

Thank you.
gfttwv5a

gfttwv5a1#

您的解决方案可能会被新的DataFrame更改:

dfNew = pd.DataFrame()
for name, group in df.groupby('C1', sort=False):
    dfNew = pd.concat([dfNew, group, pd.DataFrame(np.nan, columns=df.columns, index=[0])])

print(dfNew)

    C1   C2   C3
0    a  1.0  1.0
3    a  4.0  4.0
0  NaN  NaN  NaN
1    b  2.0  2.0
4    b  5.0  5.0
0  NaN  NaN  NaN
2    c  3.0  3.0
5    c  6.0  6.0
0  NaN  NaN  NaN

非循环解决方案可以通过附加一个DataFrame按列C1DataFrame.sort_values排序,最后按DataFrame.sort_index排序索引:

df = df.sort_values('C1', ignore_index=True)

i = df.drop_duplicates('C1', keep='last').index
dfNew = pd.concat([df, pd.DataFrame(np.nan, columns=df.columns, index=i)]).sort_index(kind='stable')
print(dfNew)

    C1   C2   C3
0    a  1.0  1.0
1    a  4.0  4.0
1  NaN  NaN  NaN
2    b  2.0  2.0
3    b  5.0  5.0
3  NaN  NaN  NaN
4    c  3.0  3.0
5    c  6.0  6.0
5  NaN  NaN  NaN

相关问题