【发布时间】:2018-09-10 22:19:29
【问题描述】:
我有一个 Dataframe 系列,其中包含每行的字符串列表。我想创建另一个系列,它是该行列表中的最后一个字符串。
所以一行可能有一个列表,例如
['a', 'b', 'c', 'd']
我想在这个“d”中创建另一个由该行的最后一个元素组成的 pandas 系列,通常作为 -1 引用访问。每个观察(即行)的列表具有不同的长度。如何做到这一点?
【问题讨论】:
我有一个 Dataframe 系列,其中包含每行的字符串列表。我想创建另一个系列,它是该行列表中的最后一个字符串。
所以一行可能有一个列表,例如
['a', 'b', 'c', 'd']
我想在这个“d”中创建另一个由该行的最后一个元素组成的 pandas 系列,通常作为 -1 引用访问。每个观察(即行)的列表具有不同的长度。如何做到这一点?
【问题讨论】:
我认为需要使用str 进行索引,它适用于所有可迭代对象:
df = pd.DataFrame({'col':[['a', 'b', 'c', 'd'],['a', 'b'],['a'], []]})
df['last'] = df['col'].str[-1]
print (df)
col last
0 [a, b, c, d] d
1 [a, b] b
2 [a] a
3 [] NaN
strings 也是可迭代对象:
df = pd.DataFrame({'col':['abcd','ab','a', '']})
df['last'] = df['col'].str[-1]
print (df)
col last
0 abcd d
1 ab b
2 a a
3 NaN
【讨论】:
[]或其他非列表的东西。
为什么不将列表列设置为信息数据框,您可以使用索引进行连接
Infodf=pd.DataFrame(df.col.values.tolist(),index=df.index)
Infodf
Out[494]:
0 1 2 3
0 a b c d
1 a b None None
2 a None None None
3 None None None None
我想我看错了问题,PiR 和 Jez 都提供了宝贵的建议来帮助我达到最终的结果。
Infodf.ffill(1).iloc[:,-1]
【讨论】:
Infodf.iloc[:, -1]