Python pandas数据框:如何对两个具有相同名称

时间:2016-04-01 07:57:05

标签: python numpy pandas dataframe

假设您有一个类似于下面的数据框(注意某些列具有相同的名称):

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.rand(4,5), columns = list('abcab'))

问题是如果你想对两列'a'执行一些操作,你怎么做,因为它们具有相同的名称? 我尝试使用replace()和rename()方法重命名两列中的一列,然后执行一些操作,但我没有设法只在一列上执行此操作。

2 个答案:

答案 0 :(得分:0)

您应该能够更改列的标签:

df.columns = ['a', 'b', 'c', 'd', 'e']

答案 1 :(得分:0)

如果您不想重命名列,可以使用iloc

#select first a column
print df.iloc[:,0]
0    0.548814
1    0.645894
2    0.791725
3    0.087129
Name: a, dtype: float64

#select second a column
print df.iloc[:,3]
Name: a, dtype: float64
0    0.544883
1    0.963663
2    0.925597
3    0.778157
Name: a, dtype: float64

#select first a column
print df['a'].iloc[:,0]
0    0.548814
1    0.645894
2    0.791725
3    0.087129
Name: a, dtype: float64

#select second a column
print df['a'].iloc[:,1]
0    0.544883
1    0.963663
2    0.925597
3    0.778157
Name: a, dtype: float64
import numpy as np
import pandas as pd

np.random.seed(0)
df = pd.DataFrame(np.random.rand(4,5), columns = list('abbab'))
print df
          a         b         b         a         b
0  0.548814  0.715189  0.602763  0.544883  0.423655
1  0.645894  0.437587  0.891773  0.963663  0.383442
2  0.791725  0.528895  0.568045  0.925597  0.071036
3  0.087129  0.020218  0.832620  0.778157  0.870012

cols=pd.Series(df.columns)
for dup in df.columns.get_duplicates():
    cols[df.columns.get_loc(dup)]=[dup+'_'+str(d_idx) if d_idx!=0 else dup for d_idx in range(df.columns.get_loc(dup).sum())]
df.columns=cols
print df
          a         b       b_1       a_1       b_2
0  0.548814  0.715189  0.602763  0.544883  0.423655
1  0.645894  0.437587  0.891773  0.963663  0.383442
2  0.791725  0.528895  0.568045  0.925597  0.071036
3  0.087129  0.020218  0.832620  0.778157  0.870012

编辑:如果只需要重命名具有相同名称的列,请使用get_loc

<xsl:template
    match="*[x:ProductDescription]|*[x:IndustryCode]|*[x:ProductAttribute]|*[x:SaleItem]|*[x:SaleItemAttribute]|*[x:SaleItemfile]|*[x:SaleItemPrice]">
    <xsl:processing-instruction name="xml-multiple"/>
    <xsl:apply-templates />
</xsl:template>