使用索引为重复的DataFrame中的某一列设置值。

我创建了一个Pandas DataFrame。

import pandas as pd
students = [('jack', 34, 'Sydeny'),
            ('Riti', 30, 'Delhi'),
            ('Aadi', 16, 'New York'),
            ('Riti', 30, 'Delhi'),
            ('Riti', 30, 'Delhi'),
            ('Riti', 30, 'Mumbai'),
            ('Aadi', 40, 'London'),
            ('Sachin', 30, 'Delhi')
            ]

# Create a DataFrame object
dfObj = pd.DataFrame(students, columns=['Name', 'Age', 'City'])

我想从上面的DataFrame中找到重复的值,所以使用内建的 duplicated()来寻找重复的值。

duplicateRowsDF = dfObj[dfObj.duplicated()]

并得到了这个

Duplicate Rows except first occurrence based on all columns are :
   Name  Age   City
3  Riti   30  Delhi
4  Riti   30  Delhi

然后我想改变 duplicateRowsDF Name 列中的值,所以我试着在 duplicateRowsDF 中进行迭代。

for i in range(len(duplicateRowsDF)):
    duplicateRowsDF.at[i,'Name']= 'rohit'

但 duplicateRowsDF 的内容并没有改变,而是添加了两条新闻行,并添加了新的索引。

 Name   Age   City
3   Riti  30.0  Delhi
4   Riti  30.0  Delhi
0  rohit   NaN    NaN
1  rohit   NaN    NaN

我想要这样的输出

Name   Age   City
    3   rohit  30.0  Delhi
    4   rohit  30.0  Delhi

有什么建议吗?

解决方案:

你可以在过滤后的DataFrame中创建新的列,并使用 DataFrame.copy 以免 SettingWithCopyWarning:

duplicateRowsDF = dfObj[dfObj.duplicated()].copy()
duplicateRowsDF['Name'] = 'rohit'

或使用 DataFrame.assign:

duplicateRowsDF = dfObj[dfObj.duplicated()].assign(Name='rohit')

您的解决方案是可行的,但速度慢 DataFrame.iatIndex.get_loc 的位置。

for i in range(len(duplicateRowsDF)):
    duplicateRowsDF.iat[i,duplicateRowsDF.columns.get_loc('Name')]= 'rohit'

给TA打赏
共{{data.count}}人
人已打赏
未分类

翻译掩码真实sip地址和简化sip地址。

2022-9-8 22:44:27

未分类

拟态方法,期待一个列表

2022-9-8 22:55:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索