我想列出Pandas数据框中所有列中的所有唯一值,并将它们存储在另一个数据框中。我已经尝试过了,但是明智地附加了行,我希望明智地按列。我怎么做?
raw_data = {'student_name': ['Miller', 'Miller', 'Ali', 'Miller'],
'test_score': [76, 75,74,76]}
df2 = pd.DataFrame(raw_data, columns = ['student_name', 'test_score'])
newDF = pd.DataFrame()
for column in df2.columns[0:]:
dat = df2[column].drop_duplicates()
df3 = pd.DataFrame(dat)
newDF = newDF.append(df3)
print(newDF)
Expected Output:
student_name test_score
Ali 74
Miller 75
76
Run Code Online (Sandbox Code Playgroud)
我认为您可以使用drop_duplicates。
如果要检查某些列,并在重复时保留第一行:
newDF = df2.drop_duplicates('student_name')
print(newDF)
student_name test_score
0 Miller 76.0
1 Jacobson 88.0
2 Ali 84.0
3 Milner 67.0
4 Cooze 53.0
5 Jacon 96.0
6 Ryaner 64.0
7 Sone 91.0
8 Sloan 77.0
9 Piger 73.0
10 Riani 52.0
Run Code Online (Sandbox Code Playgroud)
谢谢你,@ c ??? s ???? 对于另一个解决方案:
df2[~df2.student_name.duplicated()]
Run Code Online (Sandbox Code Playgroud)
但是,如果要一起检查所有列是否有重复,请保留第一行:
newDF = df2.drop_duplicates()
print(newDF)
student_name test_score
0 Miller 76.0
1 Jacobson 88.0
2 Ali 84.0
3 Milner 67.0
4 Cooze 53.0
5 Jacon 96.0
6 Ryaner 64.0
7 Sone 91.0
8 Sloan 77.0
9 Piger 73.0
10 Riani 52.0
11 Ali NaN
Run Code Online (Sandbox Code Playgroud)
按新样本编辑-删除重复项并按两列排序:
newDF = df2.drop_duplicates().sort_values(['student_name', 'test_score'])
print(newDF)
student_name test_score
2 Ali 74
1 Miller 75
0 Miller 76
Run Code Online (Sandbox Code Playgroud)
EDIT1:如果要用NaNs 替换第一列的重复项:
newDF = df2.drop_duplicates().sort_values(['student_name', 'test_score'])
newDF['student_name'] = newDF['student_name'].mask(newDF['student_name'].duplicated())
print(newDF)
student_name test_score
2 Ali 74
1 Miller 75
0 NaN 76
Run Code Online (Sandbox Code Playgroud)
EDIT2:更一般的解决方案:
newDF = df2.sort_values(df2.columns.tolist())
.reset_index(drop=True)?
?.apply(lambda x: x.drop_duplicates())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11413 次 |
| 最近记录: |