python - Pandas 数据框通过逗号将重复的列组合成一个单独的数据

标签 python pandas dataframe

我的数据框几乎没有重复的列名。如果发现重复的列名,则将重复的列合并为一个。我还想保留以逗号分隔的重复列数据。任何人都可以建议一种方法来做到这一点。

我在下面构建了一个示例。在我的实际数据框中,列名是未知的。

输入数据框:

  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/

相关文章:

python - 理解 numpy 的 lstsq

python - 重新定义 Pandas DataFrame 对象中的索引

python聚合来自两个数据框的列

r - r data.frame RMarkdown 中的粗体条目

python - 如何计算第一和第三四分位数?

python - 从迭代器外部将 StopIteration 发送到 for 循环

python - 在嵌套列表中查找匹配项

python - 如何将 Pandas 数据框中的边框添加到 html 表格行标题?

string - python pandas 获取数据框中与两个精确字符串匹配的行的平均值

python - Pandas 中的逻辑多重索引