python - 根据唯一的列值重复数据帧行 n 次,并为每行重复创建具有不同值的新列

标签 python pandas dataframe rows repeat

正如标题所示,我正在尝试获取行重复的数据帧。 决定 N 次重复执行的因素基于原始数据帧中存在的特定列的唯一值的长度。 执行重复过程后,我想创建一个新列,将原始数据帧特定列的所有相同唯一值应用到创建的每个新行。

我知道这有点令人困惑,但我无法尝试以更好的方式暴露我的疑问。因此,为了便于您理解我所需的方法,我们提供了我的数据帧和所需输出数据帧的简要示例:

 >> Original Dataframe

       Samp     Age     Cs
 1       A      51      msi
 2       B      62      cin
 3       C      55      msi
 4       D      70      ebv
 5       E      56      gs
 ....

如您所见,我的 Cs 列有 4 个唯一值(对于不同的数据帧,这些值可能并不总是相同)。所以,我的目标是获得具有以下结构的数据框:

 >> Desired Dataframe

       Samp     Age     Cs
 1       A      51      msi
 1       A      51      cin
 1       A      51      ebv
 1       A      51      gs
 2       B      62      cin
 2       B      62      msi
 2       B      62      gs
 2       B      62      ebv
 3       C      55      msi
 3       C      55      cin
 3       C      55      ebv
 3       C      55      gs
 4       D      70      ebv
 4       D      70      cin
 4       D      70      msi
 4       D      70      gs
 5       E      56      gs
 5       E      56      cin
 5       E      56      msi
 5       E      56      ebv
 ....

如您所见,在我想要的数据框中,所有行都重复了 4 次(等于唯一 Cs 列值的数量),但 Cs 除外> 列(在不同行中应用其所有唯一值)。

最佳答案

一种解决方案是将 'Cs' 转换为 Categorical 。然后使用GroupBy + first:

df['Cs'] = df['Cs'].astype('category')

res = df.groupby(['Samp', 'Cs']).first().reset_index()
res['Age'] = res.groupby('Samp')['Age'].transform('first').astype(int)

结果

   Samp   Cs  Age
0     A  cin   51
1     A  ebv   51
2     A   gs   51
3     A  msi   51
4     B  cin   62
5     B  ebv   62
6     B   gs   62
7     B  msi   62
8     C  cin   55
9     C  ebv   55
10    C   gs   55
11    C  msi   55
12    D  cin   70
13    D  ebv   70
14    D   gs   70
15    D  msi   70
16    E  cin   56
17    E  ebv   56
18    E   gs   56
19    E  msi   56

关于python - 根据唯一的列值重复数据帧行 n 次,并为每行重复创建具有不同值的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52188382/

相关文章:

python - 如何安装 python twins 旧版本?

python - Pandas 创建 DataFrame,其第一个标题列位于其自己的行中

python - 根据现有列值从 pandas 数据框中随机选择行子集

python - Pandas 数据框。消除列中匹配某些条件的行

python - 根据条件替换一列的值

python - 使用Socket进行Python UDP通信,检查收到的数据

python全局变量,这是怎么回事?需要解释

python - Docker-django 在连接到 postgres : psycopg2. 操作错误时抛出错误:无法连接到服务器:连接被拒绝

python - 如何在 matplotlib 中按列而不是行迭代子图

python - 用于条件替换的 Groupby 或循环