Python 熊猫,复制名称重复N次的行

Python 熊猫,复制名称重复N次的行,python,pandas,dataframe,Python,Pandas,Dataframe,示例数据: df1 = pd.DataFrame({ 'file': ['file1','file1','file1','file2','file2','file2','file3','file3','file4'], 'prop1': [True,False,True,False,False,False,True,False,False], 'prop2': [False,False,False,False,True,False,False,True,False],

示例数据:

df1 = pd.DataFrame({
    'file': ['file1','file1','file1','file2','file2','file2','file3','file3','file4'],
    'prop1': [True,False,True,False,False,False,True,False,False],
    'prop2': [False,False,False,False,True,False,False,True,False],
    'prop3': [False,True,False,True,False,True,False,False,True]
})
我需要复制“文件”重复3次的行,以获得如下结果:

file    prop1   prop2   prop3
0   file1   True    False   False
1   file1   False   False   True
2   file1   True    False   False
3   file2   False   False   True
4   file2   False   True    False
5   file2   False   False   True

您可以
groupby
文件名,使用
大小进行转换,并使用结果索引数据帧:

df1[df1.groupby('file').prop1.transform('size').eq(3)]

   file   prop1  prop2  prop3
0  file1   True  False  False
1  file1  False  False   True
2  file1   True  False  False
3  file2  False  False   True
4  file2  False   True  False
5  file2  False  False   True

IIUC
transform

df=df1[df1.groupby('file')['file'].transform('count').eq(3)].copy() # esure you do not have copy warning for future modify .
    file  prop1  prop2  prop3
0  file1   True  False  False
1  file1  False  False   True
2  file1   True  False  False
3  file2  False  False   True
4  file2  False   True  False
5  file2  False  False   True
用于与列大小相同的系列,因此可能通过以下方式进行过滤:

详细信息

print (df1.groupby('file')['file'].transform('size'))
0    3
1    3
2    3
3    3
4    3
5    3
6    2
7    2
8    1
Name: file, dtype: int64
或使用:

或用于:


也可以使用+:


print (df1.groupby('file')['file'].transform('size'))
0    3
1    3
2    3
3    3
4    3
5    3
6    2
7    2
8    1
Name: file, dtype: int64
df = df1.groupby('file').filter(lambda x: len(x) == 3)
df = df1[df1['file'].map(df['file'].value_counts()) == 3]
print (df)
    file  prop1  prop2  prop3
0  file1   True  False  False
1  file1  False  False   True
2  file1   True  False  False
3  file2  False  False   True
4  file2  False   True  False
5  file2  False  False   True
new_df=df1.set_index('file').loc[df1.groupby('file').size().eq(3)]
print(new_df)
     prop1  prop2  prop3
file                      
file1   True  False  False
file1  False  False   True
file1   True  False  False
file2  False  False   True
file2  False   True  False
file2  False  False   True