抱歉,是否曾有人问过这个问题,但我进行了广泛调查,没有结果。
import pandas as pd
import numpy as np
df = pd.DataFrame(data = np.random.randint(1,10,10),columns=['a'])
a
0 7
1 8
2 8
3 3
4 1
5 1
6 2
7 8
8 6
9 6
我想创建一个新列b
,该列a
根据某些规则映射的多个值,例如a = [1,2,3]为1,a = [4,5,6,7]为2,a = [8
,9,10]为3。一对一映射对我来说很清楚,但是如果我想按值列表或范围进行映射怎么办?
我遵循这些原则…
df['b'] = df['a'].map({[1,2,3]:1,range(4,7):2,[8,9,10]:3})
有几种选择。
pd.cut
/ NumPy通过np.digitize
np.select
df = pd.DataFrame(data=np.random.randint(1,10,10), columns=['a'])
criteria = [df['a'].between(1, 3), df['a'].between(4, 7), df['a'].between(8, 10)]
values = [1, 2, 3]
df['b'] = np.select(criteria, values, 0)
的元素criteria
是布尔级数,因此对于值 列表 ,可以使用df['a'].isin([1, 3])
,等等。
range
d = {range(1, 4): 1, range(4, 8): 2, range(8, 11): 3}
df['c'] = df['a'].apply(lambda x: next((v for k, v in d.items() if x in k), 0))
print(df)
a b c
0 1 1 1
1 7 2 2
2 5 2 2
3 1 1 1
4 3 1 1
5 5 2 2
6 4 2 2
7 4 2 2
8 9 3 3
9 3 1 1
我有一个 CSV 文件,其中包含名称和电子邮件列。我的目标是映射一个新列,即将列名分成两列,名字和姓氏。以下示例表。 将 老实说,我目前只能阅读关于熊猫的文件,我已经阅读了一些关于熊猫地图的文章,但是我还没有找到合适的。 谢谢。
问题内容: 我注意到程序中存在一个错误,发生该错误的原因是因为熊猫似乎是通过引用熊猫数据框而不是通过值进行复制。我知道不可变对象将始终通过引用传递,但pandas数据帧不是不可变的,因此我不明白为什么它通过引用传递。谁能提供一些信息? 谢谢!安德鲁 问题答案: Python中的所有函数都是“按引用传递”,没有“按值传递”。如果要显式复制pandas对象,请尝试。
我有一个熊猫数据框,它有语料库的术语频率,术语为行,年份为列,就像这样: 我希望能够通过将每个单词的值除以给定年份的总单词数来标准化它们——有些年份包含两倍多的文本,所以我试图按年缩放(像谷歌图书一样)。我已经看了如何缩放单个列的例子,克里斯·阿尔邦和我在SO上看到了缩放所有列的例子,但是每次我试图将这个数据框转换为一个数组来缩放时,事情都会窒息列这个词不是数字。(我尝试将术语列设置为索引,但不太
问题内容: 我的文件夹中有多个CSV文件,其值如下: GroupID.csv是文件名。像这样有多个文件,但是值范围是在同一XML文件中定义的。我正在尝试将他们分组。该怎么办? UPDATE1:基于BobHaffner的评论,我已经做到了 得到这样的事情: 我需要根据XML文件中的bin对值进行分组。我真的很感谢您的帮助。 问题答案: 为了你的桶系列,你应该使用的功能,就像这样: 如果要自己命名垃圾
问题内容: 我正在寻找一种方法来反向旋转数据框。据我所知,pandas提供了一种pivot或pivot_table方法将EAV df转换为“普通”方法。但是,还有一种方法可以做逆运算吗? 所以给定数据框: 我想将其转换为(EAV模型): 这样做最有效的方法是什么? 问题答案: 假设是索引,将执行以下操作: 如果不是索引,请像这样设置:
我有一个数据框架,目前看起来是这样的, 数据框架1 我需要创建一个像这样的数据帧。 数据框架2 我需要从数据帧1列的值填充数据帧2的列。图片显示了示例。对此应该有什么算法和过程? 这是示例数据集