我需要创建一个python列表对象,或任何对象,从一个pandas DataFrame对象分组来自不同行的值片段

zam*_*ero 8 python list dataframe pandas

我的DataFrame在第一列中有一个字符串,在第二列中有一个数字:

            GEOSTRING  IDactivity
9     wydm2p01uk0fd2z           2
10    wydm86pg6r3jyrg           2
11    wydm2p01uk0fd2z           2
12    wydm80xfxm9j22v           2
39    wydm9w92j538xze           4
40    wydm8km72gbyuvf           4
41    wydm86pg6r3jyrg           4
42    wydm8mzt874p1v5           4
43    wydm8mzmpz5gkt8           5
44    wydm86pg6r3jyrg           5
45    wydm8w1q8bjfpcj           5
46    wydm8w1q8bjfpcj           5
Run Code Online (Sandbox Code Playgroud)

我想要做的是操纵这个DataFrame,以便为每个不同的"IDactivity"值创建一个包含字符串的列表对象,该字符串由每个"GEOSTRING"值的第5个字符组成.所以在这种情况下,我有3个不同的"IDactivity"值,我将在我的列表对象中有3个字符串,如下所示:

['2828', '9888','8888']
Run Code Online (Sandbox Code Playgroud)

同样,您在每个字符串中看到的符号是每个"GEOSTRING"值的第5个值.

我要问的是一种解决方案或方法,它不涉及太复杂的for循环,并且尽可能高效,因为我必须操纵大量数据.我希望它干净而快速.

我希望它足够清楚.

Ray*_*ama 9

这可以很容易地完成如下一个班轮:(被认为也很快)

result = df.groupby('IDactivity')['GEOSTRING'].apply(lambda x:''.join(x.str[4])).tolist()
Run Code Online (Sandbox Code Playgroud)

这将数据帧按值分组,IDactivity然后从GEOSTRING第5个元素(索引4)的每个相应字符串中选择,并将其与其他相应的字符串连接.最后我们添加tolist()方法来获取输出列表而不是pandas Series.

输出:

['2828', '9888', '8888']
Run Code Online (Sandbox Code Playgroud)

文档:

pandas.groupby
pandas.apply