gpt4 book ai didi

python - 挤压pandas DataFrame以获得非空值并修改列名

转载 作者:行者123 更新时间:2023-12-04 09:46:34 25 4
gpt4 key购买 nike

我有以下示例数据帧

import numpy as np
import pandas as pd

df = pd.DataFrame({'Tom': [2, np.nan, np.nan],
'Ron': [np.nan, 5, np.nan],
'Jim': [np.nan, np.nan, 6],
'Mat': [7, np.nan, np.nan],},
index=['Min', 'Max', 'Avg'])

看起来像这样 每一行只有一个非空值
    Tom Ron Jim Mat
Min 2.0 NaN NaN 7.0
Max NaN 5.0 NaN NaN
Avg NaN NaN 6.0 NaN

预期结果

对于每一列,我想要非空值,然后 将相应非空值的索引附加到列名 .所以最终的结果应该是这样的
    Tom_Min Ron_Max Jim_Avg Mat_Min
0 2.0 5.0 6.0 7.0

我的尝试

使用列表推导式:找到非空值,并将对应的索引附加到列名,然后创建一个新的 DataFrame
values = [df[col][~pd.isna(df[col])].values[0] for col in df.columns]

# [2.0, 5.0, 6.0, 7.0]

new_cols = [col + '_{}'.format(df[col][~pd.isna(df[col])].index[0]) for col in df.columns]

# ['Tom_Min', 'Ron_Max', 'Jim_Avg', 'Mat_Min']

df_new = pd.DataFrame([values], columns=new_cols)

我的问题

Pandas 中是否有一些内置功能可以在不使用 for 循环和列表推导式的情况下做到这一点?

最佳答案

如果可能只有一个非缺失值,请使用 DataFrame.stack 带转换 SeriesDataFrame然后 flatten MultiIndex , 使用正确的顺序 DataFrame.swaplevel DataFrame.reindex :

df = df.stack().to_frame().T.swaplevel(1,0, axis=1).reindex(df.columns, level=0, axis=1)
df.columns = df.columns.map('_'.join)
print (df)
Tom_Min Ron_Max Jim_Avg Mat_Min
0 2.0 5.0 6.0 7.0

关于python - 挤压pandas DataFrame以获得非空值并修改列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62084677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com