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

2024-09-28 23:11:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

            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

我要做的是操作这个数据帧,以便有一个包含字符串的列表对象,该字符串由每个“GEOSTRING”值的第5个字符组成,用于每个不同的“IDactivity”值。 所以在本例中,我有3个不同的“IDactivity”值,我的列表对象中有3个字符串,如下所示:

^{pr2}$

这里,您在每个字符串中看到的符号,是每个“地环”值的第五个值。在

我要的是一种解决方案,或者一种方法,它不涉及太复杂的for循环,并且尽可能高效,因为我需要操作大量的数据。我希望它干净又快。在

我希望它足够清楚。在


Tags: 数据对象字符串列表数字idactivitygeostringwydm2p01uk0fd2z
2条回答

这可以很容易地做到如下一行程序:(也被认为是相当快的)

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

这将按IDactivity的值对dataframe进行分组,然后从GEOSTRING列的每个对应字符串中选择第5个元素(索引4),并将其与其他相应的字符串联接起来。最后,我们添加tolist()方法以获得list而不是pandas系列的输出。在

输出:

^{pr2}$

文件:

pandas.groupby
pandas.apply

下面是一个涉及temp列的解决方案,并从this answer中获得了键操作的灵感:

# create a temp column with the character we want from each string
dframe['Temp'] = dframe['GEOSTRING'].apply(lambda x: x[4])

# groupby ID and then concatenate using a sneaky call to .sum()
dframe.groupby('IDactivity')['Temp'].sum().tolist()

结果:

^{pr2}$

相关问题 更多 >