pandas 如何通过复制 Dataframe 中同一行上具有多个值的行来添加一个或多个已存在列的名称?

whhtz7ly  于 2023-02-17  发布在  其他
关注(0)|答案(2)|浏览(131)

我有这个 Dataframe :

ALPHA  DELTA BETA GAMMA  
0     #     1    NaN   NaN   
1     #    NaN    2     5     
2     #    NaN   NaN    3    
3     #     8     4     5

目的是通过复制在此 Dataframe 中同一行上具有多个值的行来添加一个或多个已存在列的名称。
目标是获得此 Dataframe :

NEW  ALPHA DELTA BETA GAMMA  
DELTA #     1    NaN   NaN   
BETA  #    NaN    2     5
GAMMA #    NaN    2     5      
GAMMA #    NaN   NaN    3    
DELTA #     8     4     5  
BETA  #     8     4     5   
GAMMA #     8     4     5

我不知道从何说起。你能帮忙吗?谢谢!

5us2dqdw

5us2dqdw1#

首先,我们需要添加一个新列及其值,这里我们将使用insert方法,将其放在起始位置

df.insert(0, "NEW", ['DELTA', 'BETA', 'GAMMA', 'GAMMA'])

现在我们使用iloc方法来获取新行的最后一行的所有值。然后,我们将改变新行中NEW列的值,因为它是不同的。

new_row = df.iloc[[-1]]
new_row["NEW"] = "DELTA"
df = df.append(new_row, ignore_index=True)

请注意,您在此处手动添加新行。如果行太多,您可以通过循环自动添加。您甚至可以反向执行此过程,如先添加行,然后添加列,但这将创建复杂的逻辑。

ttygqcqt

ttygqcqt2#

您的输入不是很清楚,但您可以用途:

# .iloc[:, 1:] and .columns[1:] to skip ALPHA column
>>> (df.assign(NEW=df.iloc[:, 1:].notna()
                     .dot(df.columns[1:] + ',')
                     .str.split(',').str[:-1])
       .explode('NEW'))

  ALPHA  DELTA  BETA  GAMMA    NEW
0     #    1.0   NaN    NaN  DELTA
1     #    NaN   2.0    5.0   BETA
1     #    NaN   2.0    5.0  GAMMA
2     #    NaN   NaN    3.0  GAMMA
3     #    8.0   4.0    5.0  DELTA
3     #    8.0   4.0    5.0   BETA
3     #    8.0   4.0    5.0  GAMMA

相关问题