我有一个数据框
df = pd.DataFrame({
'name_1': ['Juan', '', ''],
'name_2': ['', 'Pedro', ''],
'name_3': ['', '', 'Ana'],
'l_name': ['García', 'Sánchez', 'Hernández'],
'profession_4': ['Doctor', 'Doctor', ''],
'profession_5': ['', '', 'architect'],
'hobbie_6': ['Dance', '', 'Music'],
'hobbie_7': ['', 'Music', 'Paint'],
'hobbie_8': ['', '', 'Dance'],
})
df
其中有同名的列,所以我想做的是合并所有这些重复的列,只创建一个列,它看起来像这样:
为此,生成以下代码:
# Group the columns by their name before the underscore
grouped_columns = df.columns.to_series().groupby(lambda x: x.rsplit('_', 1)[0]).apply(list).tolist()
# Iterate through each group of columns and combine them
for columns in grouped_columns:
# Get the name of the group
group_name = columns[0].rsplit('_', 1)[0]
# Combine the columns into a new column with the name of the group
df[group_name + '_combined'] = pd.concat([df[column] for column in columns], axis=1).apply(lambda x: '/'.join(x.dropna().astype(str)), axis=1)
# Drop the original columns
df.drop(df.filter(regex='_\d+$').columns, axis=1, inplace=True)
# Display the resulting DataFrame
df
但是我得到了这个表,它会乱打印我,而且没有数据的地方也会显示/
我如何改进我的代码,使它按顺序打印表格,而不需要不必要的/,也就是说,如果有一个空单元格需要与一个完整的单元格组合,在新列中只有现有的值,而不是空的值/?
3条答案
按热度按时间fxnxkyjh1#
您可以标准化您的列名,删除后缀(使用
str.replace
),然后在列上执行groupby.agg
:或者:
输出:
6pp0gazn2#
groupby的另一个选项(mozway的路由更短,性能应该更高):
因为这本质上是一个字符串连接,所以你可以使用for循环来获得更好的性能:
您可以在
apply
空间内进一步转储到普通的python -仅在需要时进行优化。你也可以使用MultiIndex和for循环
nimxete23#
可能的解决方案:
另一种可能的解决方案:
输出: