df = pd.DataFrame({
'subsegment': ['corp', np.nan, 'terr'],
'region': ['japan', np.nan, np.nan],
'subregion': [np.nan, 'se', 'ne'],
'segment': [np.nan,'ent','comm']
})
字符串
我试图通过以上的框架,如果值不是NaN比添加列标题作为值或值的一部分(取决于有多少NaN)在新列“模式”。
原始DF
| 子段|区域|次区域|段|
| --|--|--|--|
| Corp|日本|楠|楠|
| 楠|楠|se| ent|
| Terr|楠|ne| Comm|
期望输出DF
| 子段|区域|次区域|段|模式|
| --|--|--|--|--|
| Corp|日本|楠|楠|子段区域|
| 楠|楠|se| ent|子区域段|
| Terr|楠|ne| Comm|亚段-亚段-段|
我曾尝试创建单独的较小的dfs,其中包含所有不为null的列的组合,然后将这些dfs连接在一起,但这似乎效率极低。
df1 = df.loc[~(df['subsegment'].isna()) & (~df['region'].isna()) & (~df['region'].isna())]
df2 = df.loc[~(df['region'].isna()) & (~df['subregion'].isna()) & (~df['segment'].isna())]
df3 = df.loc[~(df['subsegment'].isna()) & (~df['subregion'].isna()) & (~df['segment'].isna())]
pd.concat(df1,df2,df3.....)
型
3条答案
按热度按时间dced5bon1#
您可以使用
dot
产品:字符串
输出量:
型
或者,使用经典的
groupby.agg
:型
或自定义聚合:
型
n3ipq98p2#
您可以使用下面的代码。我使用
apply
和一个自定义函数,该函数只查找非空的列字符串
输出:
型
cld4siwp3#
一个可能的解决方案:
字符串
或者:
型
输出量:
型