Skip to main content
 首页 » 编程设计

python之如何使用来自另一个 DataFrame 对象的数据创建 Pandas DataFrame 对象

2025年05月04日11fff_TT

我的目标是使用这个数据集

         mngr  shares  value ticker 
0  JP Morgan      50     12   AAPL 
1        AQR     120     12   AAPL 
2  JP Morgan       5     30  GOOGL 
3  JP Morgan       6     25     FB 
4        AQR      10     30  GOOGL 
5        AQR      12     25     FB 
6        AQR      30     14     PG 

创建另一个数据集,其中的值取自“份额”列:

           AAPL  GOOGL   FB   PG 
JP Morgan    50      5    6   NaN 
AQR         120     10    12  30 

到目前为止我已经有了一个几乎完整的代码

import pandas as pd 
import networkx as nx 
import numpy as np 
df = pd.DataFrame({'mngr': ['JP Morgan', 'AQR', 'JP Morgan', 'JP Morgan', 'AQR', 'AQR', 'AQR'], 'shares': [50, 120, 5, 6, 10, 12, 30], 
'value': [12, 12, 30, 25, 30, 25, 14], 'ticker': ['AAPL', 'AAPL', 'GOOGL', 'FB', 'GOOGL', 'FB', 'PG']}) 
mngrlist = [] 
tickerlist = [] 
shareslist = [] 
for item in df.mngr.unique(): 
    mngrlist.append(item) 
for item in df.ticker.unique(): 
    tickerlist.append(item) 
for item in df.shares.unique(): 
    shareslist.append(item) 
print df 
r = np.zeros((len(mngrlist), len(tickerlist)))*np.nan 
df1 = pd.DataFrame(columns=tickerlist, data=r) 
df1.index = mngrlist 
for s in tickerlist: 
    for t in mngrlist: 
        tick = df['ticker'] == s 
        mn = df["mngr"] == t 
        df1[s][t] = df.loc[tick & mn, "shares"].values 
print df1 

但唯一的问题是这一行的最后一步

df1[s][t] = df.loc[tick & mn, "shares"].values 

据我了解,这两个对象具有不同的尺寸(性质),尽管如果您打印出每个

df.loc[tick & mn, "shares"].values 

它每个只有一个元素,我不知道如何将它转换成一个简单的浮点值。我也尝试过使用groupby,但没有成功。

另一个问题是是否可以为这个过程编写更高效的代码。我需要为大型数据集运行它,因此效率很重要。

请您参考如下方法:

如果我没理解错的话,你想要"pivot"原始DF:

In [305]: df.pivot(index='mngr', columns='ticker', values='shares') 
Out[305]: 
ticker      AAPL    FB  GOOGL    PG 
mngr 
AQR        120.0  12.0   10.0  30.0 
JP Morgan   50.0   6.0    5.0   NaN 

可选地,我们可以删除轴名称:

In [307]: df.pivot(index='mngr', columns='ticker', values='shares') \ 
            .rename_axis(None) \ 
            .rename_axis(None,1) 
Out[307]: 
            AAPL    FB  GOOGL    PG 
AQR        120.0  12.0   10.0  30.0 
JP Morgan   50.0   6.0    5.0   NaN