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数组将用于其他地方的分析。