从具有重复名称的 pandas 数据框列中提取数据
Extract data from pandas dataframe columns with duplicate names
我有一个包含重复列名的数据框:
Accepted Accepted Accepted Reject Accepted Reject
ABC IJK JKL XYJ LMN UIO
BCD PQR EFG YVG GHIJ PLK
...并想将其转换为两个数据帧;只有一个“接受”列和另一个“拒绝”列:
df1:
Accepted Accepted Accepted Accepted
ABC IJK JKL LMN
BCD PQR EFG GHIJ
df2:
Reject Reject
XYJ UIO
YVG PLK
尝试过:
df1=df["Accepted"]
df2=df["Reject"]
...但这只会给出与该名称匹配的第一列。
如果 select 同名的一列被 select 编辑 DataFrame 中所有同名的列:
df1 = df['Accepted']
df2 = df['Reject']
然后可以对列进行重复数据删除:
df1.columns = [f'{x}_{i}' for i, x in enumerate(df1.columns, 1)]
df2.columns = [f'{x}_{i}' for i, x in enumerate(df2.columns, 1)]
编辑:如果只得到第一个列名,这意味着没有重复的列名,所以可以使用 DataFrame.filter
:
df1 = df.filter(like='Accepted')
df2 = df.filter(like='Reject')
你也可以用这个
df1 = df.loc[:,df.columns.isin(['accepted'])]
或
df2 = df.loc[:,df.columns.isin(['rejected'])]
IMO 为列指定相同的名称不是一个好的做法。为每一列使用唯一的名称。在名称中输入数字或添加唯一字符都没有关系。让它独一无二
我的解决方案,先重命名列
df.columns = ['Accepted1','Accepted2','Accepted3','Reject1','Accepted4','Reject2']
df1 = df[['Accepted1','Accepted2','Accepted3','Accepted4']]
df2 = df[['Reject1','Reject2']]
不建议列名重复,但无论如何:
df1 = df.loc[:, df.columns.get_loc('Accepted')]
Accepted Accepted Accepted Accepted
0 ABC IJK JKL LMN
1 BCD PQR EFG GHIJ
df2 = df.loc[:, df.columns.get_loc('Reject')]
我有一个包含重复列名的数据框:
Accepted Accepted Accepted Reject Accepted Reject
ABC IJK JKL XYJ LMN UIO
BCD PQR EFG YVG GHIJ PLK
...并想将其转换为两个数据帧;只有一个“接受”列和另一个“拒绝”列:
df1:
Accepted Accepted Accepted Accepted
ABC IJK JKL LMN
BCD PQR EFG GHIJ
df2:
Reject Reject
XYJ UIO
YVG PLK
尝试过:
df1=df["Accepted"]
df2=df["Reject"]
...但这只会给出与该名称匹配的第一列。
如果 select 同名的一列被 select 编辑 DataFrame 中所有同名的列:
df1 = df['Accepted']
df2 = df['Reject']
然后可以对列进行重复数据删除:
df1.columns = [f'{x}_{i}' for i, x in enumerate(df1.columns, 1)]
df2.columns = [f'{x}_{i}' for i, x in enumerate(df2.columns, 1)]
编辑:如果只得到第一个列名,这意味着没有重复的列名,所以可以使用 DataFrame.filter
:
df1 = df.filter(like='Accepted')
df2 = df.filter(like='Reject')
你也可以用这个
df1 = df.loc[:,df.columns.isin(['accepted'])]
或
df2 = df.loc[:,df.columns.isin(['rejected'])]
IMO 为列指定相同的名称不是一个好的做法。为每一列使用唯一的名称。在名称中输入数字或添加唯一字符都没有关系。让它独一无二
我的解决方案,先重命名列
df.columns = ['Accepted1','Accepted2','Accepted3','Reject1','Accepted4','Reject2']
df1 = df[['Accepted1','Accepted2','Accepted3','Accepted4']]
df2 = df[['Reject1','Reject2']]
不建议列名重复,但无论如何:
df1 = df.loc[:, df.columns.get_loc('Accepted')]
Accepted Accepted Accepted Accepted
0 ABC IJK JKL LMN
1 BCD PQR EFG GHIJ
df2 = df.loc[:, df.columns.get_loc('Reject')]