python - 将一些数值列映射到 Pandas 中的新元组列中

标签 python pandas

对于 object 数据,我可以将两列映射到第三个(object)元组列

>>> import pandas as pd
>>> df = pd.DataFrame([["A","b"], ["A", "a"],["B","b"]])
>>> df
   0  1
0  A  b
1  A  a
2  B  b

>>> df.apply(lambda row: (row[0], row[1]), axis=1)
0    (A, b)
1    (A, a)
2    (B, b)
dtype: object

(另请参阅 Pandas: How to use apply function to multiple columns )。

但是,当我尝试对数字列执行相同的操作时

>>> df2 = pd.DataFrame([[10,2], [10, 1],[20,2]])
df2.apply(lambda row: (row[0], row[1]), axis=1)
     0     1
0    10    2
1    10    1
2    20    2

因此,我得到的是 DataFrame,而不是一系列对(即 [(10,2), (10,1), (20,2)]) .

如何强制pandas真正获得一系列对? (最好比转换为字符串然后解析更好。)

最佳答案

我不建议这样做,但你可以强制这样做:

In [11]: df2.apply(lambda row: pd.Series([(row[0], row[1])]), axis=1)
Out[11]:
         0
0  (10, 2)
1  (10, 1)
2  (20, 2)

请不要这样做。

两列将为您提供更好的性能、灵活性和后续分析的便利性。

只是为了更新OP的经验:

我们想要的是计算每个 [0, 1] 对的出现次数。

在系列中,他们可以使用 value_counts方法(使用上述结果中的列)。然而,使用 groupby 可以获得相同的结果。并发现速度快了 300 倍(对于 OP):

df2.groupby([0, 1]).size()

值得再次强调的是,[11] 必须为每行创建一个 Series 对象和一个元组实例,与此相比,这是一个巨大的开销到 groupby 的。

关于python - 将一些数值列映射到 Pandas 中的新元组列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18392998/

相关文章:

python - 非分类数据框到分类数据,用于 seaborn 绘制箱形图、群图、带状图等

python - 将基于 GMT 的时间转换为 UTC python

用于字符串替换的python正则表达式

python - 变换矩阵

python - 线程 : AssertionError: group argument must be None for now

python - 如何使用 python 和 pandas 导入 Excel 文件并搜索特定记录?

python - pandas - 检查数据框中是否存在日期

android - Buildozer Android Kivy 导入要求失败

python - 如何使用 diff() 函数来识别 Pandas 中的薪资变化以进行人力资源分析?

python - 在 pandas.DataFrame 的对角线上设置值