【发布时间】:2018-01-29 15:33:15
【问题描述】:
我有一个超过 1000 行的 pandas 数据框,看起来有点像这样:
Copy name type ntv
G1 BA X 0.45
G1 BB X 0.878
G1 C Z 0.19
G1 LA1 Y 1.234
G1 L Y 0.09
G1 LB Y 1.056
F2 BA1 X -7.890
F2 BB X 2.345
F2 MA Y -0.871
F2 LB1 Y 0.737
在上面的例子(df1)中,有两组“复制”列,G1 和 F2,名称各异,有 X、Y 和 Z 三种类型。
我想创建另一个数据框 (df2),如下图所示,它们以 X-Y 或 Z-Y 的形式组合在一起。
Model ntv_1 ntv_2
G1BA-LA1 0.45 1.234
G1BB-LB 0.878 1.056
G1C-L 0.19 0.09
F2BA1-MA -7.890 -0.871
F2BB-LB1 2.345 0.737
对于 X-Y 组,它们具有共同的 df1['name'] 的第二个字符。所以,我决定这样处理:
c = df1[(df1['name'].str[0]=='B' & (df1['ntv'] != 0.0)]
h = df1[((df1['name'].str[0]=='L')|(df1['name'].str[0]=='M')) & (df['ntv'] != 0.0)]
b = (c.loc[:,c['name'].str[1]] == h.loc[:,h['name'].str[1]]).groupby('Copy')
df2['Model'] = c['Copy'].astype(str) + c['name'].astype(str) + '-' + h['name'].astype(str)
df2['ntv_1'] = c['ntv']
df2['ntv_2'] = h['ntv']
我收到了 KeyError 消息。所以我决定这样做:
ca = c['name'].str[1].dropna()
ha = h['name'].str[1].dropna()
if ca == ha:
df2['Model'] = c['Copy'].astype(str) + c['name'].astype(str) + '-' + h['name'].astype(str)
df2['ntv_1'] = c['ntv']
df2['ntv_2'] = h['ntv']
但我得到一个 ValueError:“系列长度必须匹配才能比较。”
请问如何将数据框分组为 X-Y 或 Z-Y 形式?提前致谢!
【问题讨论】:
-
为什么BB选择LB而不是L?
-
@ScottBoston 这是因为 df['name'] 中的单个字符只要在同一个“副本”中就可以配对。这就是“C”与“L”配对的原因。此外,X 型通常以字母“B”开头,而 Y 型通常以“L”或“M”开头。
标签: python pandas pandas-groupby