Python的熊猫表操作
问题描述:
我有一个熊猫数据帧,它看起来像:Python的熊猫表操作
broker1 broker2 broker3 ticker
0 val1 val2 val3 tick1
1 val4 None val6 tick2
我会想操纵它(不知道什么是这个术语:支点扭转GROUPBY?)的方式,使得他们是按其个人价值排序,即:
ticker ticker_b broker
0 tick1 val1 broker1
1 tick1 val2 broker2
2 tick1 val3 broker3
3 tick2 val4 broker1
4 tick2 val6 broker2
有没有办法使用熊猫来做到这一点?非常感谢您提供的任何帮助!
答
使用melt()
,其中 “unpivots” 的表:
In [46]: df = pd.read_table(io.StringIO(""" broker1 broker2 broker3 ticker
...: 0 val1 val2 val3 tick1
...: 1 val4 None val6 tick2"""), sep='\s+')
In [47]: df = df.replace('None', float('nan'))
In [48]: melted = df.melt(id_vars=("ticker",),
...: var_name="broker",
...: value_name="ticker_b").\
...: dropna().\
...: sort_values(["ticker", "ticker_b"])
In [49]: melted
Out[49]:
ticker broker ticker_b
0 tick1 broker1 val1
2 tick1 broker2 val2
4 tick1 broker3 val3
1 tick2 broker1 val4
5 tick2 broker3 val6
答
而且管理使用concat
它做,虽然ILJA Everila的回答是更好:
oldcols = ["broker1","broker2","broker3"]
newcols = ["ticker","ticker_b","broker"]
newdf = pd.DataFrame(columns=newcols)
for col in oldcols:
tmpdf = df.loc[:,["ticker",col]]
tmpdf.columns = newcols[0:2]
tmpdf[newcols[-1]] = col
newdf = pd.concat([newdf,tmpdf])
newdf.dropna(subset=["ticker"], inplace=True)
太感谢你了! –