gpt4 book ai didi

python - 合并数据框中的重复列

转载 作者:太空宇宙 更新时间:2023-11-04 04:51:46 25 4
gpt4 key购买 nike

我正在尝试从一组系列中获取一个新数据框(我将其原始数据框设置为空白 DF)。这是我必须获得该系列的代码。

all_keys = list(dict_months.keys())
for i in all_keys:
for j in range(len(dict_months[i])):
temp_num = df_mth_return.loc['1992-'+str(i),dict_months[i][j]]
blank_df = blank_df.append(temp_num) # append Series to blank_df

这是结果系列的示例输出,每个 temp_num 都是一个 pandas 系列

Date 
1992-02-03 -2.174845
Name: IBM US Equity, dtype: float64
Date
1992-02-03 0.878127
Name: MMM US Equity, dtype: float64
Date
1992-03-02 -3.884848
Name: IBM US Equity, dtype: float64

这是我得到的结果

en          IBM US Equity   MMM US Equity   IBM US Equity   MMM US Equity   IBM US Equity   IBM US Equity   
2/3/1992 -2.17485 0.878127 NaN all the way across >> NaN
3/2/1992 NaN NaN -3.88485 -2.47076 NaN acorss >>
1/2/1992 NaN NaN NaN NaN 1.123077 NaN across >>>>
7/1/1992 NaN NaN NaN NaN NaN -3.19279 3.091772 NaN across >>>>
4/1/1992 ETC.... DOWN

但我希望最终数据框如下所示,以便相同的列只显示一次。有人可以帮忙吗。这是 blank_DF 的一个小样本,它适用于多列和更多行。

           IBM US Equity    MMM US Equity
2/3/1992 -2.17485 0.878127
3/2/1992 -3.88485 -2.47076
1/2/1992 1.123077 NaN
7/1/1992 -3.19279 3.091772
4/1/1992 NaN 5.63469
5/1/1992 1.312976 2.867628

最佳答案

我相信您需要按列进行 groupby 并将 lambda 函数与 bfill 一起用于使用 iloc 回填 NaN > 选择第一列:

df = df.groupby(axis=1, level=0).apply(lambda x: x.bfill(axis=1).iloc[:, 0])
print (df)
IBM US Equity MMM US Equity
en
2/3/1992 -2.174850 0.878127
3/2/1992 -3.884850 -2.470760
1/2/1992 1.123077 NaN
7/1/1992 -3.192790 3.091772

另一种使用numpy 和完善Divakar 函数的解决方案justify - 仅通过 [:, 0] 选择二维数组中的第一个值:

f = lambda x: pd.Series(justify(x.values, invalid_val=np.nan, axis=1, side='left')[:, 0])
df = df.groupby(axis=1, level=0).apply(f)
print (df)

关于python - 合并数据框中的重复列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48131804/

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