Python 为数据帧中的特定行组合行索引和行值(字符串)

Python 为数据帧中的特定行组合行索引和行值(字符串),python,pandas,Python,Pandas,假设我有一个熊猫数据帧: df = pd.DataFrame({'col1': range(10), 'col2': ['a', 'b', 'c', 'a', 'e', 'f', 'g', 'a', 'h', 'i']}) 它看起来像: col1 col2 0 0 a 1 1 b 2 2 c 3 3 a 4 4 e 5 5 f 6 6 g 7 7 a 8 8 h

假设我有一个熊猫数据帧:

df = pd.DataFrame({'col1': range(10), 'col2': ['a', 'b', 'c', 'a', 'e', 'f', 'g', 'a', 'h', 'i']})
它看起来像:

   col1 col2
0     0    a
1     1    b
2     2    c
3     3    a
4     4    e
5     5    f
6     6    g
7     7    a
8     8    h
9     9    i
我想更新df['col2']='a'的所有值,并将行索引附加到a,以便得到:

   col1 col2
0     0    a_0
1     1    b
2     2    c
3     3    a_3
4     4    e
5     5    f
6     6    g
7     7    a_7
8     8    h
9     9    i
用于比较转换为字符串后值是否等于a和col1/索引

df['col2']=df['col2'].mask(df['col2'].eq('a'),df['col2'].add('_'+df.index.astype(str)))

#df['col2']=df['col2'].mask(df['col2'].eq('a'),df['col2'].add('_'+df['col1'].astype(str)))

print(df)
用于比较转换为字符串后值是否等于a和col1/索引

df['col2']=df['col2'].mask(df['col2'].eq('a'),df['col2'].add('_'+df.index.astype(str)))

#df['col2']=df['col2'].mask(df['col2'].eq('a'),df['col2'].add('_'+df['col1'].astype(str)))

print(df)
理解力 一个非常低的内存占用循环,可以就地编辑

for i, v in df.col2.iteritems():
    if v == 'a':
        df.at[i, 'col2'] = f'a_{i}'
理解力 一个非常低的内存占用循环,可以就地编辑

for i, v in df.col2.iteritems():
    if v == 'a':
        df.at[i, 'col2'] = f'a_{i}'

一个numpy替代方案df['col2']=np。其中df['col2']='A',A_'+df.index.astypestr,df['col2']@anky_91对于一个有很多行的数据帧,比如说300米,这个解决方案似乎占用了大量内存。对于一个有很多行的数据帧,这个解决方案似乎占用了大量内存,300 M,此解决方案似乎占用了大量内存为什么要更新df['col2']='a'处的所有值并将行索引附加到a?这是一个非常非熊猫的成语。您真的不应该使用索引值或NaN创建一个单独的列,其中df['col2']!='a'?这感觉像是一个XY问题。你最终要做什么?我需要使行具有唯一性,而不是该列中的任何其他行。你为什么说你需要这样做?你在做一些连接吗?使用col2作为进一步操作的索引或键?它只是格式化一些文本以便输出吗?除非我们了解您的背景,否则我们只能猜测解决方案。请向我们发布周围的代码行。下一步是在转换后调用col2上的pd.factorize,然后生成的NumPy数组将用于其他地方的分析。为什么要更新df['col2]=='a'的所有值,并将行索引附加到a?这是一个非常非熊猫的成语。您真的不应该使用索引值或NaN创建一个单独的列,其中df['col2']!='a'?这感觉像是一个XY问题。你最终要做什么?我需要使行具有唯一性,而不是该列中的任何其他行。你为什么说你需要这样做?你在做一些连接吗?使用col2作为进一步操作的索引或键?它只是格式化一些文本以便输出吗?除非我们了解您的背景,否则我们只能猜测解决方案。请向我们发布周围的代码行。下一步是在转换后调用col2上的pd.factorize,然后生成的NumPy数组将用于其他地方的分析。