小编ALo*_*llz的帖子

带有列表的 pandas 数据框中的唯一项目

我正在尝试从 pandas 数据框中删除所有列,其中该列中的唯一项少于 10 个。但是,我的一些数据是列表,我收到错误unhashable type: 'list'。这是有道理的,因为 pandas 与哈希图进行比较。

我当前的代码是

for i in df.columns:
    if len(df[i].unique()) < 10:
        df.drop(i, 1)
Run Code Online (Sandbox Code Playgroud)

在我到达列表对象之前,它工作得很好。就我的目的而言, list1 和 list2 不是唯一的。[1, 2]并且[2, 1]不是唯一的,尽管[1, 2] == [2, 1]是 False 。

我应该如何执行此操作?分隔列表没有意义,而且我无法显式键入列,因为我有 1400 个列。

提前谢谢了!

python dataframe pandas

3
推荐指数
1
解决办法
6924
查看次数

Pandas - 行是否属于具有列值和相同ID的行

我是熊猫的新手.我有一个像这样的Pandas数据框:

df = pd.DataFrame(data={'id': [1, 1, 1, 2, 2, 2, 2], 'val1': [0, 1, 0, 0, 1, 0, 0]})
Run Code Online (Sandbox Code Playgroud)

我想添加一个列val2,指示一行是否落在另一行与其id自身相同的行之下val1 == 1.

结果将是一个数据框,如:

df = pd.DataFrame(data={'id': [1, 1, 1, 2, 2, 2, 2], 'val1': [0, 1, 0, 0, 1, 0, 0], 'val2': [0, 0, 1, 0, 0, 1, 1]})
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是使用apply语句,但这些只是按行进行.从我的循环经验来看,永远不是答案.任何帮助将不胜感激!

python apply dataframe pandas

3
推荐指数
1
解决办法
38
查看次数

熊猫:如何绘制电影计数的饼图与熊猫中的IMDB电影类型?

我有以下数据集:

import pandas as pd
import numpy as np 
%matplotlib inline

df = pd.DataFrame({'movie' : ['A', 'B','C','D'], 
                   'genres': ['Science Fiction|Romance|Family', 'Action|Romance',
                              'Family|Drama','Mystery|Science Fiction|Drama']},
                  index=range(4))
df
Run Code Online (Sandbox Code Playgroud)

我的尝试

# Parse unique genre from all the movies
gen = []
for g in df['genres']:
    gg = g.split('|')
    gen = gen + gg
    gen = list(set(gen))

print(gen)

df['genres'].value_counts().plot(kind='pie')
Run Code Online (Sandbox Code Playgroud)

我有这个图像: 在此输入图像描述

但我想为每个单独的类型饼图.

我们如何获得每种独特类型的电影数量类型?

python plot imdb matplotlib pandas

3
推荐指数
2
解决办法
956
查看次数

通过np.select的“default”参数输入空值

尝试在给定的特定条件下将值写入列,默认值为 Null 值,代码如下:

import pandas as pd
import numpy as np
df = pd.DataFrame({'col': list('ABCDE')})

cond1 = df['col'].eq('A')
cond2 = df['col'].isin(['B', 'E'])

df['new_col'] = np.select([cond1, cond2], ['foo', 'bar'], default=np.NaN)
Run Code Online (Sandbox Code Playgroud)

但它'nan'在列中给出字符串值。

df['new_col'].unique()
#array(['foo', 'bar', 'nan'], dtype=object)
Run Code Online (Sandbox Code Playgroud)

有没有办法直接从这段代码中将其更改为 null?

numpy python-3.x

3
推荐指数
1
解决办法
4094
查看次数

如何在Pandas Groupby中合并连接的字符串

我试图弄清楚如何计算2个字符串的给定组合,而不管哪个字符串是第一/第二。

这是我的代码:

import pandas as pd

mylist = [[('Smith JR', 'Kim YY'), ('Smith JR', 'Ron AA'), ('Kim YY', 'Ron AA')],
          [('Kim YY', 'Smith JR')], [('Smith JR', 'Ron AA')]]

flat_list = [item for sublist in mylist for item in sublist]

df = pd.DataFrame(flat_list, columns=["From", "To"])
df_graph = df.groupby(["From", "To"]).size().reset_index()
df_graph.columns = ["From", "To", "Count"]

print(df_graph)
Run Code Online (Sandbox Code Playgroud)

这使:

       From        To  Count
0    Kim YY    Ron AA      1
1    Kim YY    Smith JR    1
2  Smith JR    Kim YY      1
3  Smith JR    Ron …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

3
推荐指数
1
解决办法
67
查看次数

Pandas enumerate groups in descending order

I've the following column:

   column
0      10
1      10
2       8
3       8
4       6
5       6
Run Code Online (Sandbox Code Playgroud)

My goal is to find the today unique values (3 in this case) and create a new column which would create the following

   new_column
0           3
1           3
2           2
3           2
4           1
5           1
Run Code Online (Sandbox Code Playgroud)

The numbering starts from length of unique values (3) and same number is repeated if current row is same as previous row based on original column. Number …

python group-by dataframe pandas pandas-groupby

3
推荐指数
2
解决办法
94
查看次数

编写数据框字典以分隔 Excel 工作表

我有一个字典,其中包含“data.csv”中每个状态的数据框。

df=pd.read_csv('data.csv')

dict_of_st = {k: v for k, v in df.groupby('Preferred State/Province')}
Run Code Online (Sandbox Code Playgroud)

我想将每个数据框写入已经存在的工作簿('test.xlsx')中的单独 excel 表。

我尝试使用 for 循环和 load workbook

from openpyxl import load_workbook

book = load_workbook('test.xlsx')
writer = pd.ExcelWriter('test.xlsx', engine='openpyxl') 
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)

for i in dict_of_st:
    i.to_excel(writer, sheet_name=i)

writer.save()
Run Code Online (Sandbox Code Playgroud)

但是 jupyter notebook 引发了这个错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-8-c1ba1b4d53d8> in <module>
      7 
      8 for i in dict_of_st:
----> 9     i.to_excel(writer, sheet_name=i)
     10 
     11 writer.save()

AttributeError: 'str' object has no …
Run Code Online (Sandbox Code Playgroud)

python excel dictionary pandas

3
推荐指数
1
解决办法
2826
查看次数

生成元素之间的依赖关系矩阵

我必须建立一个数据框架元素之间的依赖关系矩阵。列“ s”中的每个元素都有一个不同节点(从1到70)和对应时间(列“ t”)的列表。任务是找到所有节点之间的所有依赖关系,并将时间值的总和放入表中。

例如:节点sa1与以下节点具有连接:sa2,sa3(0行),sa3(1行),sa5,sa9(3行)

对于节点sa2,sa5,sa9,可以使用直接来自列“ t”的值,因为它们仅出现一次。节点3分两行显示,因此我们将“ t”值相加。

我尝试使用许多for循环来解决它,并且我遇到了计时问题,需要处理大约50分钟的数据,因此需要一些提示,说明如何准备数据进行分析。

正如我刚刚注意到的那样,仅需要计算主对角线上方的元素,主对角线将为NaN,而主对角线以下的元素将被镜像。

这就是我的输入示例的样子

         s           t 

 0  sa1,sa2,sa3     10
 1  sa1,sa3         20
 2  sa1,sa5,sa9     123
Run Code Online (Sandbox Code Playgroud)

这是生成上面显示的表的代码

sas = pd.Series(['sa1,sa2,sa3', 'sa1,sa3', 'sa1,sa5,sa9'], name='s')
times = pd.Series([10, 20, 123], name='t')
df = pd.concat([sas, times], axis=1)
Run Code Online (Sandbox Code Playgroud)

我希望得到下表

    sa1    sa2    sa3    sa4    sa5    ...    sa9  
sa1  -     10      30           123           123
sa2  10     -
sa3  30              - 
sa4                       -
sa5 123                          -
...                                     -
sa9 123                                        -
Run Code Online (Sandbox Code Playgroud)

python algorithm pandas data-science

3
推荐指数
1
解决办法
46
查看次数

在python中将对象数据类型转换为字符串问题

如何将对象数据类型结构转换为字符串数据类型?下面的方法不起作用,并且object在转换为字符串后该列仍然存在.astype

import pandas as pd
df = pd.DataFrame({'country': ['A', 'B', 'C', 'D', 'E']})

df.dtypes
#country    object
#dtype: object

df['county'] = df['country'].astype(str)

df.dtypes
#country    object
#dtype: object
Run Code Online (Sandbox Code Playgroud)

python-3.x pandas

3
推荐指数
2
解决办法
2831
查看次数

Pandas 数据框过滤器和 For 循环

我有一个包含许多列的数据框。我正在尝试过滤其中一列(“区域”)并根据“区域”列中的这 4 个区域中的每一个创建一个单独的数据框。然后在这 4 个单独的数据帧中的每一个上运行包含大量计算的大代码块,而不必单独重写大代码块 4 次。

我知道我可以使用 .isin 函数进行列过滤,并为我的 4 个地区(美国、新兴市场、欧洲、亚洲)执行此操作:

US = df[df['Region'].isin('US')]
EM = df[df['Region'].isin('EM')]
Europe = df[df['Region'].isin('Europe')]
Asia = df[df['Region'].isin('Asia')]
Run Code Online (Sandbox Code Playgroud)

然后在 4 个新数据帧上运行我的代码块。但是我会分别执行我的大块计算代码 4 次,这太混乱了。我怎样才能在循环中做到这一点,所以我只需要一次编写我的大代码块?如果除了 for 循环之外,我还可以使用另一个函数来执行此操作,这也很棒。感谢任何帮助 - 尝试学习。

虚拟代码:

df = pd.DataFrame({'a':[1,2,3,4,5,6], 'b':['cats','dogs','birds','pianos','elephant','dinos'], 'Region' : ['EM', 'US', 'US', 'Europe', 'Asia', 'Asia']})
Run Code Online (Sandbox Code Playgroud)

python for-loop pandas pandas-groupby

2
推荐指数
1
解决办法
4382
查看次数