我有两个 DataFrame,其中一个包含一列,其单元格内包含列表。这是一个例子:
DF 1 :
| A B
---+----------------------------
0 | 'A' ['A', 'B']
1 | 'B' ['B', 'D']
2 | 'C' ['D', 'E', 'F']
DF 2 :
| C D
---+----------------------------
0 | 'A' 'X'
1 | 'B' 'Y'
2 | 'C' 'Z'
Run Code Online (Sandbox Code Playgroud)
这是设置 DataFrame 的代码:
df1 = pd.DataFrame({'A': ["A", "B", "C"], "B": [["A", "B"], ["B", "D"], ["D", "E", "F"]]})
df2 = pd.DataFrame({'C': ["A", "B", "C"], "D": ["X", "Y", "Z"]})
Run Code Online (Sandbox Code Playgroud)
我想用条件在 DF1 和 DF2 之间进行内部联接DF2.C in DF1.B,这是我期望的结果: …
我有一个 Pandas 数据框,如下所示:
tags value
[tag1, tag2, tag3] 0
[tag2, tag3] 10
[tag1, tag3] 50
...
Run Code Online (Sandbox Code Playgroud)
在此数据框上,我想应用一个函数,对于每行的每个标签,将创建一个包含“标签”列和“相关标签”列的新行。这是我所期待的一个例子:
tag value related_tags
tag1 0 [tag2, tag3]
tag2 0 [tag1, tag3]
tag3 0 [tag1, tag2]
tag2 10 [tag3]
tag3 10 [tag2]
tag1 50 [tag3]
tag3 50 [tag1]
Run Code Online (Sandbox Code Playgroud)
我熟悉 Spark DataFrames 但不熟悉 Pandas,有没有一种简单的方法可以实现这一点?
我想将存储为两列(开始、结束)+值的日期范围转换为仅包含日期和值的两个新列。
\n\n我的数据:
\n\n id end start value\n1 4421 2014-01-01 2014-01-03 10\n2 4421 2014-01-04 2014-01-04 500\n3 4421 2014-01-05 2014-01-07 20\n4 5560 2014-01-02 2014-01-03 100\n5 5560 2014-01-04 2014-01-04 600\nRun Code Online (Sandbox Code Playgroud)\n\n我想要的是:
\n\n Date id value\n0 2014-01-01 4421 10\n1 2014-01-02 4421 10\n2 2014-01-03 4421 10\n3 2014-01-04 4421 500\n4 2014-01-05 4421 20\n5 2014-01-06 4421 20\n6 2014-01-07 4421 20\n7 2014-01-01 5560 NA\n8 2014-01-02 5560 100\n9 2014-01-03 5560 100\n10 2014-01-04 5560 600\nRun Code Online (Sandbox Code Playgroud)\n\nI\xe2\x80\x99m 使用 dplyr,所以我可以与 mutate 和管道等一起使用的东西会很有用。
\n\n样本数据:
\n\nid <- c(4421, 4421, …Run Code Online (Sandbox Code Playgroud) 我有一个 df 像:
ID value1 start end
1 100 1 2
1 200 2 4
2 50 1 1
2 30 3 5
Run Code Online (Sandbox Code Playgroud)
我想为开始和结束之间的每个值填充新行
最终的 df 应如下所示,其中 period 是开始和结束之间的每个唯一值
ID value1 period
1 100 1
1 100 2
1 200 2
1 200 3
1 200 4
2 50 1
2 30 3
2 30 4
2 30 5
Run Code Online (Sandbox Code Playgroud) 假设我有一个 pandas 数据框,例如
df_p = pd.DataFrame(
{'name_array':
[[20130101, 320903902, 239032902],
[20130101, 3253453, 239032902],
[65756, 4342452, 32425432523]],
'name': ['a', 'a', 'c']} )
Run Code Online (Sandbox Code Playgroud)
我想提取包含每行中的展平数组的系列,同时保留顺序
预期结果是pandas.core.series.Series
这个问题不是重复的,因为我的预期输出是 pandas 系列,而不是数据框。
我有一个类似于以下内容的数据框
+----------------+-------+
| class | year |
+----------------+-------+
| ['A', 'B'] | 2001 |
| ['A'] | 2002 |
| ['B'] | 2001 |
| ['A', 'B', 'C']| 2003 |
| ['B', 'C'] | 2001 |
| ['C'] | 2003 |
+----------------+-------+
Run Code Online (Sandbox Code Playgroud)
我想使用它创建一个数据框,以使结果表显示每个类中每个类别的计数。
+-----+----+----+----+
|year | A | B | C |
+-----+----+----+----+
|2001 | 1 | 3 | 1 |
|2002 | 1 | 0 | 0 |
|2003 | 1 | 1 | 2 |
+-----+----+----+----+
Run Code Online (Sandbox Code Playgroud)
最简单的方法是什么?
我有一个熊猫数据框:
| items
--------------
0 | [a]
1 | [a, b]
2 | [d, e, f,f]
3 | [d, f, e]
4 | [c, a, b]
Run Code Online (Sandbox Code Playgroud)
我想计算列表中每个项目的频率,并构建一个如下表:
a| b| c| d| e| f
-------------------------
0| 1| 0| 0| 0| 0| 0
1| 1| 1| 0| 0| 0| 0
2| 0| 0| 0| 1| 1| 2
3| 0| 0| 0| 1| 1| 1
4| 1| 1| 1| 0| 0| 0
Run Code Online (Sandbox Code Playgroud)
我看着pandas.explode,但我不认为这是我想要的。
我可以在下面做类似的事情。但是我觉得可能会有更有效的方法来做到这一点。我大约有350万行。
| items
--------------
0 | [a]
1 …Run Code Online (Sandbox Code Playgroud) 一个pandas.DataFrame.explode作品如何?
在文档中:
https://pandas.pydata.org/pandas-docs/version/0.25/reference/api/pandas.DataFrame.explode.html
Run Code Online (Sandbox Code Playgroud)df = pd.DataFrame({'A': [[1, 2, 3], 'foo', [], [3, 4]], 'B': 1}) display(df) print(df.columns) print(df.dtypes) df.explode('A')
工作得很好。但是对于我的数据,它因一个关键异常而失败。我的数据最初是这样的:

具有以下类型:
print(foo.columns)
print(foo.dtypes)
Index(['model', 'id_min_days_cutoff'], dtype='object')
model object
id_min_days_cutoff int64
dtype: object
Run Code Online (Sandbox Code Playgroud)
其中model是使用 statsmodels 回归获得的:
model.summary2().tables[1]
Run Code Online (Sandbox Code Playgroud)
调用时:df.explode('model')
它失败了:
KeyError: 0
Run Code Online (Sandbox Code Playgroud)
试图重现这一点:
df_json = df.to_json()
# now load it again for SF purposes
df_json = '{"model":{"0":{"Coef.":{"ALQ_15PLUS_perc":95489.7866599741,"AST_perc":-272.9213162565,"BEV_UNTER15_perc":6781.448845533,"BEV_UEBER65_perc":-46908.2889142205},"Std.Err.":{"ALQ_15PLUS_perc":1399665.9788843254,"AST_perc":1558.1286516172,"BEV_UNTER15_perc":2027111.8764156068,"BEV_UEBER65_perc":1230965.9812726702},"z":{"ALQ_15PLUS_perc":0.0682232676,"AST_perc":-0.1751596802,"BEV_UNTER15_perc":0.0033453747,"BEV_UEBER65_perc":-0.038106893},"P>|z|":{"ALQ_15PLUS_perc":0.9456079052,"AST_perc":0.8609541651,"BEV_UNTER15_perc":0.9973307821,"BEV_UEBER65_perc":0.9696024555},"[0.025":{"ALQ_15PLUS_perc":-2647805.1223393031,"AST_perc":-3326.7973567063,"BEV_UNTER15_perc":-3966284.8215624653,"BEV_UEBER65_perc":-2459557.2784026605},"0.975]":{"ALQ_15PLUS_perc":2838784.6956592514,"AST_perc":2780.9547241933,"BEV_UNTER15_perc":3979847.7192535317,"BEV_UEBER65_perc":2365740.7005742197}},"1":{"Coef.":{"ALQ_15PLUS_perc":-140539.5196612777,"AST_perc":142.579413527,"BEV_UNTER15_perc":-45288.5612893498,"BEV_UEBER65_perc":-152106.9841374909},"Std.Err.":{"ALQ_15PLUS_perc":299852250.9155113101,"AST_perc":24013.7007484301,"BEV_UNTER15_perc":417010365.7919532657,"BEV_UEBER65_perc":171876588.9403209388},"z":{"ALQ_15PLUS_perc":-0.0004686959,"AST_perc":0.0059374194,"BEV_UNTER15_perc":-0.000108603,"BEV_UEBER65_perc":-0.0008849779},"P>|z|":{"ALQ_15PLUS_perc":0.9996260348,"AST_perc":0.9952626525,"BEV_UNTER15_perc":0.9999133474,"BEV_UEBER65_perc":0.9992938899},"[0.025":{"ALQ_15PLUS_perc":-587840151.997330904,"AST_perc":-46923.4091889186,"BEV_UNTER15_perc":-817370586.6933914423,"BEV_UEBER65_perc":-337024031.0927618742},"0.975]":{"ALQ_15PLUS_perc":587559072.9580082893,"AST_perc":47208.5680159725,"BEV_UNTER15_perc":817280009.5708128214,"BEV_UEBER65_perc":336719817.1244869232}}},"id_min_days_cutoff":{"0":2,"1":3}}'
pd.read_json(df_json).explode('model')
Run Code Online (Sandbox Code Playgroud)
失败:
KeyError: 0
Run Code Online (Sandbox Code Playgroud)
尝试使用以下方法之一找到替代方法:如何在 Pandas DataFrame 中取消嵌套(分解)一列?选择 2.1
pd.DataFrame({'model':np.concatenate(df_json.model.values)},
index=df_json.index.repeat(ddf_jsonf.model.str.len()))
Run Code Online (Sandbox Code Playgroud)
但这失败了:
ValueError: zero-dimensional arrays cannot be concatenated …Run Code Online (Sandbox Code Playgroud) 我坚持这个问题,如何按行划分熊猫数据框,
我在列中有类似的数据框,其中值之间用\ r \ n分隔并且它们在一个单元格中,
Color Shape Price
0 Green Rectangle\r\nTriangle\r\nOctangle 10
1 Blue Rectangle\r\nTriangle 15
Run Code Online (Sandbox Code Playgroud)
我需要将此单元格划分为其他单元格的值与其他列相同的多个单元格,例如此处
Color Shape Price
0 Green Rectangle 10
1 Green Triangle 10
2 Green Octangle 10
3 Blue Rectangle 15
4 Blue Tringle 15
Run Code Online (Sandbox Code Playgroud)
如何做得更好?
除了DataFrame.from_dict能够从具有不相等值列表的字典中创建数据框之外,是否还有内置函数?
我正在尝试从以下字典创建数据框:
d = {'g': {1, 2, 3}, 'h': {4, 5}}
Run Code Online (Sandbox Code Playgroud)
因此输出应如下所示:
value class
0 1 g
1 2 g
2 3 g
3 4 h
4 5 h
Run Code Online (Sandbox Code Playgroud)
使用集合而不是列表是否有问题?
pandas ×9
python ×9
python-3.x ×2
dataframe ×1
dictionary ×1
dplyr ×1
explode ×1
flatten ×1
keyerror ×1
r ×1
series ×1
time ×1
time-series ×1