我的数据框几乎没有重复的列名。如果发现重复的列名,则将重复的列合并为一个。我还想保留以逗号分隔的重复列数据。任何人都可以建议一种方法来做到这一点。
我在下面构建了一个示例。在我的实际数据框中,列名是未知的。
输入数据框:
Col1 Col2 Col3 Col2
A CA1 CA5 CA3 CA5
B CB1 CB5 CB3 CB5
C CC1 CC5 CC3 CC5
D CD1 CD5 CD3 None
E CE1 CE5 CE3 CE5
可以通过以下方式阅读:
df = pd.read_clipboard(names=['Col1','Col2','Col3','Col2'], skiprows=1)
输出数据框:
Col1 Col2 Col3
A CA1 CA5,CA5 CA3
B CB1 CB5,CB5 CB3
C CC1 CC5,CC5 CC3
D CD1 CD5 CD3
E CE1 CE5,CE5 CE3
最佳答案
您还可以:
df.groupby(df.columns, axis=1).agg(lambda x: ','.join(x.values)))
Col1 Col2 Col3
Index
A CA1 CA2,CA5 CA3
B CB1 CB2,CB5 CB3
C CC1 CC2,CC5 CC3
D CD1 CD2,CD5 CD3
E CE1 CE2,CE5 CE3
详细说明:在 df.columns
上使用 .groupby()
对重复项进行分组:
df.groupby(df.columns, axis=1).apply(lambda x: x.info())
<class 'pandas.core.frame.DataFrame'>
Index: 5 entries, A to E
Data columns (total 1 columns):
Col1 5 non-null object
dtypes: object(1)
memory usage: 80.0+ bytes
<class 'pandas.core.frame.DataFrame'>
Index: 5 entries, A to E
Data columns (total 2 columns):
Col2 5 non-null object
Col2 5 non-null object
dtypes: object(2)
memory usage: 120.0+ bytes
<class 'pandas.core.frame.DataFrame'>
Index: 5 entries, A to E
Data columns (total 1 columns):
Col3 5 non-null object
dtypes: object(1)
然后,使用 .agg()
和 ','.join()
折叠 分组中的
列,如下所示:.values
df.groupby(df.columns, axis=1).apply(lambda x: x.values)
Col1 [[CA1], [CB1], [CC1], [CD1], [CE1]]
Col2 [[CA5, CA5], [CB5, CB5], [CC5, CC5], [CD5, CD5...
Col3 [[CA3], [CB3], [CC3], [CD3], [CE3]]
因为只有重复的列有多个值,所以只有它们会被连接起来,所以你会得到:
Col1 Col2 Col3
Index
A CA1 CA5,CA5 CA3
B CB1 CB5,CB5 CB3
C CC1 CC5,CC5 CC3
D CD1 CD5,CD5 CD3
E CE1 CE5,CE5 CE3
使用 None
类型值,您可以:
df.groupby(df.columns, axis=1).apply(lambda x: x.apply(lambda y: ','.join([l for l in y if l is not None]), axis=1))
得到:
Col1 Col2 Col3
Index
A CA1 CA5,CA5 CA3
B CB1 CB5,CB5 CB3
C CC1 CC5,CC5 CC3
D CD1 CD5 CD3
E CE1 CE5,CE5 CE3
关于python - Pandas 数据框通过逗号将重复的列组合成一个单独的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37932391/