python - Pandas dataframe,每个单元格都进入列表 - 更pythonic的方式?

标签 python pandas

我有一个 pandas 数据框,其中包含这样的列和行:

    a   b   c   d  
a  40  15  25  35  

b  10  25  35  45

c  20  35  45  55

d  40  45  55  65

对于所有大于 30 的数字,我需要这样的输出:

a, a, 40
a, d, 40
b, c, 35
b, d, 45

等等。

目前我正在运行这样一个循环:

    for i in df.columns:
        for j in df.index:
            if df[i][j] > 30:
                a.append(i+","+j+","+str(df[i][j])")

这有效,但速度很慢。有没有更像 Python 的方法来做到这一点?

谢谢!

最佳答案

您可以使用 stackboolean indexing :

df = df.stack().reset_index()
df.columns = ['a','b','c']

print (df[df.c > 30])
    a  b   c
0   a  a  40
3   a  d  35
6   b  c  35
7   b  d  45
9   c  b  35
10  c  c  45
11  c  d  55
12  d  a  40
13  d  b  45
14  d  c  55
15  d  d  65

类似的解决方案:

s = df.stack()
df = s[s > 30].reset_index()
df.columns = ['a','b','c']

print (df)
    a  b   c
0   a  a  40
1   a  d  35
2   b  c  35
3   b  d  45
4   c  b  35
5   c  c  45
6   c  d  55
7   d  a  40
8   d  b  45
9   d  c  55
10  d  d  65

另一种解决方案:

df1 = df[df > 30].stack().reset_index()
df1.columns = ['a','b','c']
df1.c = df1.c.astype(int)
print (df1)
    a  b   c
0   a  a  40
1   a  d  35
2   b  c  35
3   b  d  45
4   c  b  35
5   c  c  45
6   c  d  55
7   d  a  40
8   d  b  45
9   d  c  55
10  d  d  65

最后您可以申请加入:

df['d'] = df.astype(str).apply(', '.join, axis=1)
print (df)
    a  b   c         d
0   a  a  40  a, a, 40
1   a  d  35  a, d, 35
2   b  c  35  b, c, 35
3   b  d  45  b, d, 45
4   c  b  35  c, b, 35
5   c  c  45  c, c, 45
6   c  d  55  c, d, 55
7   d  a  40  d, a, 40
8   d  b  45  d, b, 45
9   d  c  55  d, c, 55
10  d  d  65  d, d, 65

print (df.d.tolist())
['a, a, 40', 'a, d, 35', 'b, c, 35', 'b, d, 45', 'c, b, 35', 'c, c, 45', 
'c, d, 55', 'd, a, 40', 'd, b, 45', 'd, c, 55', 'd, d, 65']

关于python - Pandas dataframe,每个单元格都进入列表 - 更pythonic的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39979889/

相关文章:

python - 尽管我所有的行值都是数字(不是 NaN),为什么 pandas 2min 存储桶打印 NaN?

python - 如何从另一个文件夹读取数据文件而不给出python中的完整路径?

python - 在 Pandas 中重采样和归一化不规则时间序列数据

python - 什么时候(以及为什么)引入 Python `__new__()`?

python - 使用具有通用页眉/页脚和分页的 WeasyPrint 生成 PDF

python - 如何使用 Python 从 Bash 提示符中捕获用户输入

python - 使用 Python 如何合并两列并仅在另一列中的数据存在时覆盖一列中的数据?

Python、Numpy : How to select numpy array with given mask

python - 范围太大 Python

python - 长pandas逻辑运算