将多列中的列表合并到熊猫中的单列
Posted
技术标签:
【中文标题】将多列中的列表合并到熊猫中的单列【英文标题】:Merge list in multiple columns to a single column in pandas 【发布时间】:2021-12-02 01:08:57 【问题描述】:我有一个以下格式的熊猫数据框:
0 1 2 3
A.pkl [121,122] [123] [124,125] [126,127]
列数也可能更多。最后,我想合并所有列中的所有值并将其写入单个列。
结果数据框:
values
A.pkl [121,122,123,124,125,126,127]
我使用下面的代码来生成第一部分:
df = pd.DataFrame(
g: pd.read_pickle(f'g')['values'].tolist()
for g in groups
).T
我尝试使用 itertools.chain,但它似乎没有成功。
任何建议将不胜感激。
输入数据框:
df = pd.DataFrame('name': ['aa.pkl'],
'0': [["001A000001", "003A0025"]],
'1': [["003B000001","003C000001"]],
'2': [["003D000001", "003E000001"]],
'3': [["003F000001", "003G000001"]])
上面的dataframe是通过读取pickle文件生成的
【问题讨论】:
df.sum(axis=1)
似乎工作正常。
@QuangHoang:无法为系列对象做到这一点
【参考方案1】:
其实itertools.chain
是一种方法,但你必须正确地去做:
from itertools import chain
df.apply(lambda x: list(chain(*x)), axis=1)
输出:
A.pkl [121, 122, 123, 124, 125, 126, 127]
dtype: object
正如@QuangHoang 建议的那样,您也可以使用df.sum(axis=1)
技巧,但要小心,这仅适用于列表。如果由于某种原因您有 numpy 数组,这将执行每个位置的总和 ([494, 497]
)。
输入:
df = pd.DataFrame('0': [[121, 122]],
'1': [[123]],
'2': [[124, 125]],
'3': [[126, 127]])
【讨论】:
它在 lambda 函数中抛出一个 axis=1 的错误。我用这个: g: pd.read_pickle(f'g')['cluster'].apply(lambda x: list(chain(*x)), axis=1) 您能否将您的输入数据框提供为数据框构造函数或字典 (df.to_dict('list')
)? (见我的更新)
将其添加到问题中
@user3447653 我明白了,您应该从链接中排除“名称”,将其设置为索引:df.set_index('name').apply(lambda x: list(chain(*x)), axis=1)
以上是关于将多列中的列表合并到熊猫中的单列的主要内容,如果未能解决你的问题,请参考以下文章