从项目列表中创建特定形状的熊猫数据框
Posted
技术标签:
【中文标题】从项目列表中创建特定形状的熊猫数据框【英文标题】:Creating a pandas data frame of specific Shape from a list of items 【发布时间】:2019-10-08 09:31:06 【问题描述】:我有一个特定大小的熊猫数据框:
ID FACTOR LEVEL
160 SPM P
159 SPM2 S
851 ABS K
415 ABS P
202 ABS P
205 ABS2 Q
207 AQE T
我想要做的是列出两个项目: X = ['GAB', 'YER']
所以我想要做的是我想将列表中的这些项目作为一个新列分配,例如 NewCol,其特定频率与数据帧中行的大小相同。所以在这种情况下,假设我有 7 行和 2 个项目,并且 7/2 整数商为 3,所以我想将第一项放在 3 行中,将下一项放在剩余的 4 行中。所以输出应该是:
ID FACTOR LEVEL NewCol
160 SPM P GAB
159 SPM2 S GAB
851 ABS K GAB
415 ABS P YER
202 ABS P YER
205 ABS2 Q YER
207 AQE T YER
所以到目前为止我能够做的是使用
创建一系列两个元素 df_s = pd.DataFrame(X)
这是给我的
0
GAB
YER
但是,我无法使用 X 中的值创建数据框形状的系列,也无法找到分发它的方法。我仍在努力,但专家的一些帮助/提示将不胜感激。
【问题讨论】:
【参考方案1】:使用np.repeat
并将结果分配给新列:
arr = np.repeat(X, len(df) // len(X))
df['NewCol'] = pd.Series(arr, index=df.index[:len(arr)])
df
ID FACTOR LEVEL NewCol
0 160 SPM P GAB
1 159 SPM2 S GAB
2 851 ABS K GAB
3 415 ABS P YER
4 202 ABS P YER
5 205 ABS2 Q YER
6 207 AQE T NaN
如果要填充最后一个 NaN,请使用,
df['NewCol'] = df['NewCol'].ffill()
【讨论】:
【参考方案2】:一些不同的想法使用clip
import numpy as np
n=len(X)
m=len(df)//n
s=pd.Series(np.arange(len(df))//m).clip_upper(n-1)
df['New']=s.map(dict(zip(s.unique(),X)))
df
Out[278]:
ID FACTOR LEVEL New
0 160 SPM P GAB
1 159 SPM2 S GAB
2 851 ABS K GAB
3 415 ABS P YER
4 202 ABS P YER
5 205 ABS2 Q YER
6 207 AQE T YER
【讨论】:
是的,这是一种新方法,我没用过,早点剪辑。学到了新东西!谢谢以上是关于从项目列表中创建特定形状的熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章