python - 将多行分组到新数据框中

标签 python pandas numpy pandas-groupby

我是一个正在使用 2.7 版本的 Python 新手。下面是我正在使用的数据框的示例。还有一些与问题无关的其他列,因此未包含在下面。

df = pd.DataFrame( { "Name" : ["BROD", "BROD", "BROD", "BROD", "SSBD" , "SSBD","SSBD","SSBD"] , 
                     "Digit" : ["F", "F", "T", "T", "F", "F", "T", "T"],
                     "ID": ["A","A","A","A","B","B","B","B"],
                     "Date": ["2/3/2010","2/3/2010","2/3/2010","2/3/2010","3/4/2007","3/4/2007","3/4/2007","3/4/2007"],
                     "Base" : ["CAD","CAD","CAD","CAD","CAD","CAD","CAD","CAD"],
                     "Term" : ["USD","USD","JPY","JPY","EUR","EUR","JPY","JPY"],
                     "Amt": [100.00,100.00,9082.00,9082.00,60.00,60.00,7387.80,7387.80]})

有多个重复值。每行代表一笔交易的一个组成部分,ID 列将它们分组为一笔交易。我想创建一个新的数据框,其中每笔交易仅包含一行。数据框如下所示:

ID    Date       Name     Buy   Sell    Buy Amt Sell Amt
A    2/3/2010    BROD     USD   JPY     100.00   9082.00
B    3/4/2007    SSBD     EUR   JPY     60.00    7387.80

对于每个 ID,如果 Digit = F,则 Term 列中的值将放置在 Buy 列中,Amt 列中的值将放置在 Buy Amt 列中。如果 Digit = T,则 Term 列中的值将放置在 Sell 列中,Amt 列中的值将放置在 Sell Amount 列中。

请为我指出正确的方向,以找到解决此问题的最有效方法。谢谢。

最佳答案

您可以使用np.where,然后使用groupby

df['Buy'] = np.where((df['Digit'] == 'F'), df['Term'], np.nan)

df['Sell'] = np.where((df['Digit'] == 'T'), df['Term'], np.nan)

df['BuyAmt'] = np.where((df['Digit'] == 'F'), df['Amt'], np.nan)
df['SellAmt'] = np.where((df['Digit'] == 'T'), df['Amt'], np.nan)

df.drop(['Digit','Base','Term','Amt'], axis=1, inplace= True)

df = df.groupby('ID').first()

print(df)
    Name      Date  Buy Sell  BuyAmt  SellAmt
ID                                           
A   BROD  2/3/2010  USD  JPY   100.0   9082.0
B   SSBD  3/4/2007  EUR  JPY    60.0   7387.8

此外,如果您需要像您发布的那样按顺序排列列,则可以使用pandas reindex

关于python - 将多行分组到新数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52302465/

相关文章:

python - 从机翼坐标文件中读取和绘制坐标的最简单方法是什么?

python - 错误 : object() takes no parameters , 无法解决

python - 在 iPython 中使用 HDF5 文件时出现异常 'HDFStore requires PyTables '

python - 如何使用 python 列表列表?

python - 规范化/标准化 numpy recarray

python - Pandas 重新采样不规则时间序列

python - PyQt4中exe的窗口图标

python - 更改堆积面积图中某一段的透明度

python - 基于另一个列表对列表元素进行分组

performance - cython 中的动态数组创建