根据熊猫中的索引范围组合列的行
Posted
技术标签:
【中文标题】根据熊猫中的索引范围组合列的行【英文标题】:Combine rows of a column based on index range in pandas 【发布时间】:2020-03-20 18:25:35 【问题描述】:我有一个包含一列的数据框。
Index | column1 |
0 and
1 too
2 ask
3 the
4 but
5 hat
6 hot
7 top
8 tap
我想根据条件组合索引之间的行。例如,如果一行有字母“a”,则索引将是:
0, 2, 5, 8
因此,合并行:
(0, 1), (2, 3, 4), (5, 6, 7), (8)
最后的输出是:
Index | column1 |
0 and, too
1 ask, the, but
2 hat, hot, top
3 tap
我试过的是:
[i for i in range(len(df['column1'])) if 'a' in df['column1'][i]]
给我索引:
[0, 2, 5, 8]
但从这里卡住了。谢谢
【问题讨论】:
【参考方案1】:将a
与Series.str.contains
进行比较并通过Series.cumsum
创建组,然后通过过滤g[g > 0]
删除可能包含非a
值的组,最后使用join
进行聚合:
g = df['column1'].str.contains('a').cumsum()
df = df.groupby(g[g > 0])['column1'].apply(', '.join).reset_index(drop=True).to_frame()
print (df)
column1
0 and, too
1 ask, the, but
2 hat, hot, top
3 tap
第一个值不包含a
:
print (df)
column1
1 too
2 ask
3 the
4 but
5 hat
6 hot
7 top
8 tap
g = df['column1'].str.contains('a').cumsum()
df = df.groupby(g[g > 0])['column1'].apply(', '.join).reset_index(drop=True).to_frame()
print (df)
column1
0 ask, the, but
1 hat, hot, top
2 tap
【讨论】:
【参考方案2】:stuff=["and","too","ask","the","but","hat","hot","top","tap"]
newlist=[]
collection=[]
for i in stuff:
if "a" in i:
if len(collection) >0:
newlist.append(collection)
collection=[]
collection.append(i)
newlist.append(collection)
尝试这样的事情
【讨论】:
以上是关于根据熊猫中的索引范围组合列的行的主要内容,如果未能解决你的问题,请参考以下文章