我如何将熊猫列转换为列表,具体取决于另一列的值?

时间:2020-06-17 18:35:23

标签: python pandas

因此,假设我有一个这样的表并将其存储到我的df中:

+-------+------+------+------+
| Block | col1 | col2 | col3 |
+-------+------+------+------+
|     1 | A    |    1 | 1F   |
|     1 | B    |    2 | 3D   |
|     1 |      |    3 |      |
|     2 | C    |    2 |      |
|     2 | G    |      |      |
|     3 | H    |    5 | 1D   |
|     3 | I    |    2 | 3H   |
|     3 |      |      | 4K   |
+-------+------+------+------+

我将如何使用方法

df['col1'].tolist()

,但仅当块列为1时。我可以遍历它,但是我读过,在熊猫df上迭代并不是最好的方法,并且想知道是否有更聪明的方法这个。

1 个答案:

答案 0 :(得分:0)

注意:我想您可能会问两个问题,所以我都回答了​​。我将在一分钟内整理好这个答案。

如果您只想要一个包含col1元素的列表,且该元素的同一行具有'Block'== 1;

df = pd.DataFrame({'Block': [1,1,1,2,2,3,3,3], 'col1':['A', 'B', '', 'C', 'G', 'H', 'I', '']})

ones_part = df['Block'] == 1

df[ones_part]['col1'].tolist()

如果要在'Block'== 1时转换 col1的条目,则

df = pd.DataFrame({'Block': [1,1,1,2,2,3,3,3], 'col1':['A', 'B', '', 'C', 'G', 'H', 'I', '']})

df['col1'].where(df['Block'] != 1, other=df['col1'].apply(list))

此外,为了清楚起见,有两个原因不能在数据帧上进行迭代。一是因为使用本地熊猫方法某些操作要快得多。它们是用C而不是python实现的。另一个是为了清楚起见-它被认为更具可读性。