正如标题所示,我正在尝试获取行重复的数据帧。 决定 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/