花了相当多的时间观察SO上的r和pandas标签,我得到的印象是pandas问题不太可能包含可重现的数据.这是值得的R社会一直要鼓励不错,并感谢像导游这样,新人能得到放在一起,这些例子一些帮助.能够阅读这些指南并返回可重现数据的人通常会更好地获得他们问题的答案.
我们如何为pandas问题创建良好的可重复示例?简单的数据帧可以放在一起,例如:
import pandas as pd
df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice'],
'income': [40000, 50000, 42000]})
Run Code Online (Sandbox Code Playgroud)
但是许多示例数据集需要更复杂的结构,例如:
datetime 指数或数据expand.grid()函数,它会产生某些给定变量的所有可能组合?)对于dput()难以使用几行代码进行模拟的数据集,是否有与R相当的R ,它允许您生成可复制粘贴的代码以重新生成数据结构?
例如,数据如下所示:
df={'a1':[5,6,3,2,5],'a2':[23,43,56,2,6], 'a3':[4,2,3,6,7], 'a4':[1,2,1,3,2],'a5':[4,98,23,5,7],'a6':[5,43,3,2,5]}
x=pd.DataFrame(df)
Out[260]:
a1 a2 a3 a4 a5 a6
0 5 23 4 1 4 5
1 6 43 2 2 98 43
2 3 56 3 1 23 3
3 2 2 6 3 5 2
4 5 6 7 2 7 5
Run Code Online (Sandbox Code Playgroud)
我需要结果看起来像:
top1 top2 top3
a2 a1 a6
a5 a2 a6
....
Run Code Online (Sandbox Code Playgroud)
我已经看到了建议idxmax的先前问题的答案(见下文)。但是如何处理前n个值(n> 1)?
更新:
我发现答案非常有用,但唯一的问题是我的数据很长,因此必须找出一种绕过该问题的方法。我最终将数据保存到一个csv文件中,然后分块读取。这是我使用的代码:
data = pd.read_csv('xxx.csv', chunksize=1000)
rslt = pd.DataFrame(np.zeros((0,3)), columns=['top1','top2','top3'])
for chunk in data:
x=pd.DataFrame(chunk).T
for i in x.columns: …Run Code Online (Sandbox Code Playgroud) 根据这篇文章:Find the column name which has the max value for every row,很清楚如何使用 获取具有每行最大值的列名称df.idxmax(axis=1)。
问题是,如何获得每行的第二个、第三个等等最大值?
论坛上有很多例子,如何找到具有相应列名的行的最大值。一些例子在这里或这里
我想做的是对上面的例子进行一些具体的修改。我的数据框看起来像这样,其中所有列都是从左到右编号的(这个顺序非常重要):
x_1 x_2 x_3 x_4 x_5 x_6 x_7 x_8 x_9 x_10
0 0 1 2 2 0 0 0 0 0
4 4 0 4 4 1 0 0 0 0
0 0 1 2 3 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
现在,我想在每行末尾创建 6 个新列,其中包含列名称和行中的最大值。
x_1 x_2 x_3 x_4 x_5 x_6 x_7 x_8 x_9 x_10 Max1 ValMax1 Max2 ValMax2 Max3 ValMax3
0 0 1 2 2 0 0 0 0 0
4 4 0 4 4 1 …Run Code Online (Sandbox Code Playgroud) 我有一个 Pandas 数据框,其中有几列的范围从 0 到 100。我想在数据框中添加一列,其中包含每行具有最大值的列的名称。所以:
one two three four COLUMN_I_WANT_TO_CREATE
5 40 12 19 two
90 15 58 23 one
74 95 34 12 two
44 81 22 97 four
10 59 59 44 [either two or three, selected randomly]
Run Code Online (Sandbox Code Playgroud)
等等。
如果解决方案可以随机解决关系,则加分。
我试图找到pandas相当于这个问题.
我想在下面的数据框中添加一个新列,这是每行中最低值的列名.
Multi-Use Charging Performer Controls Value for Money All Rounder
0 1.569541 0.290916 2.396734 0.881500 3.171563 1.950175
1 0.906542 2.296172 0.162809 1.604936 0.730633 0.532835
2 0.442924 0.970764 1.264364 0.295140 2.034826 0.824529
3 0.167663 1.367973 0.877306 0.683562 1.653964 0.444136
4 0.870290 0.547844 1.703054 0.209975 2.476787 1.260371
Run Code Online (Sandbox Code Playgroud)
得到min很简单: df.iloc[:, 0:6].min(axis=1)
如何根据min返回列名?
对于以下数据框数据:
x y a b c
2 6 12 1 2
1 2 4 6 8
Run Code Online (Sandbox Code Playgroud)
我想要新列(即 d)的结果,该列仅在 a、b、c 之间返回具有最大值的列名称。
cols
a
c
Run Code Online (Sandbox Code Playgroud)
我试图从三列中找到最大值并返回列名。但是我不想选择数据集的所有行,而是只选择这三列的行。我使用以下代码:
def returncolname(row, colnames):
return colnames[np.argmax(row.values)]
data['colmax'] = data.apply(lambda x: returncolname(x, data.columns), axis=1)
Run Code Online (Sandbox Code Playgroud) 我想转换一个看起来像这样的表:
Blue Green Red
Thing 1 No Yes No
Thing 2 Yes No No
Thing 3 Yes No No
Run Code Online (Sandbox Code Playgroud)
进入这种风格:
Color
Thing 1 Green
Thing 2 Blue
Thing 3 Blue
Run Code Online (Sandbox Code Playgroud)
在 python 或 Pandas 中有没有一个很好的方法来做到这一点?这些表格样式有名称吗?
我正在开发一个具有如下 DataFrame 的 Python 项目:
data = {'AAA': [3, 8, 2, 1],
'BBB': [5, 4, 7, 2],
'CCC': [2, 5, 6, 4]}
df = pd.DataFrame(data)
Run Code Online (Sandbox Code Playgroud)
这导致:
| AAA | 血脑屏障 | CCC | |
|---|---|---|---|
| 0 | 3 | 5 | 2 |
| 1 | 8 | 4 | 5 |
| 2 | 2 | 7 | 6 |
| 3 | 1 | 2 | 4 |
该任务包括生成以下 DataFrame:
| AAA | 血脑屏障 | CCC | 角色 | |
|---|---|---|---|---|
| 0 | 3 | 5 | 2 | 血脑屏障 |
| 1 | 8 | 4 | 5 | AAA |
| 2 | 2 | 7 | 6 | 血脑屏障 |
| 3 | 1 | 2 | 4 | CCC |
其中“角色”列元素是其所在行中具有最高值的列标题。
您能帮我建议一个解决此任务的代码吗?