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

Posted

技术标签:

【中文标题】我需要从 pandas DataFrame 对象中创建一个 python 列表对象或任何对象,对来自不同行的值进行分组【英文标题】:I need to create a python list object, or any object, out of a pandas DataFrame object grouping pieces of values from different rows 【发布时间】:2017-12-12 22:33:18 【问题描述】:

我的 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

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

['2828', '9888','8888']

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

我要问的是一种解决方案或方法,它不涉及过于复杂的for 循环,并且尽可能高效,因为我必须处理大量数据。我希望它既干净又快速。

我希望它足够清楚。

【问题讨论】:

【参考方案1】:

这可以通过以下方式轻松完成:(也被认为非常快)

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

这会按IDactivity 的值对数据框进行分组,然后从GEOSTRING 列的每个对应字符串中选择第5 个元素(索引4)并将其与其他对应字符串连接。最后我们添加tolist() 方法来获取输出为列表而不是熊猫系列。

输出:

['2828', '9888', '8888']

文档:

pandas.groupbypandas.apply

【讨论】:

【参考方案2】:

这是一个涉及临时列的解决方案,并从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()

结果:

['2828', '9888', '8888']

【讨论】:

这实际上很有用,因为我正在学习如何处理数据帧。 Rayhane 的回答可能更快,但你也很有帮助,谢谢

以上是关于我需要从 pandas DataFrame 对象中创建一个 python 列表对象或任何对象,对来自不同行的值进行分组的主要内容,如果未能解决你的问题,请参考以下文章

pandas读取csv数据为dataframe计算dataframe中相连两行数据(记录)的时间差并将时间差从timedelta对象转化为整数

我需要从包含列表的字典中使用 MultiIndex 在 Pandas 中创建一个 DataFrame

从 pandas Dataframe 中提取月份数据

如何将数据从 Scikit-learn Bunch 对象转换为 Pandas DataFrame?

Pandas:从 Pandas DataFrame 中选择两个日期之间的所有数据

使用 Multiindex 从 Pandas DataFrame 中选择数据